A medida que descargas y construyes imágenes, tu máquina va acumulando una colección que puede crecer rápidamente y consumir mucho espacio en disco. Saber administrar esas imágenes es tan importante como saber crearlas. En esta lección aprenderemos a listar las imágenes con docker images, eliminarlas con docker rmi, limpiar las que ya no se usan con docker image prune, inspeccionar sus detalles internos, exportarlas e importarlas con docker save y docker load, y mantener bajo control el espacio en disco. Son tareas cotidianas que todo usuario de Docker realiza constantemente.

Listar Imágenes con docker images

El comando docker images muestra todas las imágenes almacenadas localmente.

docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    a1b2c3d4e5f6   2 days ago      188MB
miapp        1.0       f6e5d4c3b2a1   1 hour ago      180MB
<none>       <none>    998877665544   3 days ago      210MB

Significado de cada columna:

  • REPOSITORY: el nombre del repositorio de la imagen.
  • TAG: la etiqueta de versión. latest es el valor por defecto.
  • IMAGE ID: identificador único (abreviado) de la imagen.
  • CREATED: cuándo se creó la imagen.
  • SIZE: el espacio que ocupa.

Las imágenes con <none> en repositorio y tag son imágenes huérfanas (dangling): capas que quedaron sin nombre, normalmente porque una reconstrucción reasignó su tag a una imagen nueva. Conviene limpiarlas.

Opciones útiles:

docker images -q
  • -q (quiet): muestra solo los IDs. Es muy útil para combinarlo con otros comandos.
docker images --filter "dangling=true"
  • --filter "dangling=true": muestra solo las imágenes huérfanas.
docker images --format "{{.Repository}}:{{.Tag}} -> {{.Size}}"
  • --format: personaliza la salida. Aquí muestra el nombre y el tamaño de cada imagen.

Eliminar Imágenes con docker rmi

docker rmi (remove image) borra una o varias imágenes.

docker rmi miapp:1.0
  • Elimina la imagen miapp:1.0. Si esa imagen tiene varios tags, este comando solo quita el tag indicado; la imagen sigue existiendo mientras le quede algún nombre.

Para eliminar por ID:

docker rmi f6e5d4c3b2a1

Si una imagen está en uso por un contenedor (aunque esté detenido), Docker se niega a borrarla:

Error response from daemon: conflict: unable to delete f6e5d4c3b2a1 (must be forced) - image is being used by stopped container 1a2b3c
  • La solución correcta es eliminar primero el contenedor que la usa, o forzar el borrado con -f (con cuidado):
docker rmi -f f6e5d4c3b2a1
  • -f (force) fuerza la eliminación. Úsalo con precaución, porque puede dejar contenedores apuntando a una imagen inexistente.

Para borrar varias imágenes a la vez, puedes combinar con docker images -q:

docker rmi $(docker images -q)
  • Esto intenta eliminar todas las imágenes locales. Úsalo solo si de verdad quieres vaciar tu colección.

Limpiar con docker image prune

docker image prune elimina imágenes innecesarias de forma masiva, sin tener que listarlas una a una.

docker image prune
  • Por defecto, elimina solo las imágenes huérfanas (<none>). Pedirá confirmación antes de borrar.

Para eliminar todas las imágenes que no estén siendo usadas por ningún contenedor:

docker image prune -a
  • -a (all): borra todas las imágenes sin un contenedor asociado, no solo las huérfanas. Es mucho más agresivo.

Opciones útiles:

docker image prune -a -f --filter "until=24h"
  • -f: no pide confirmación.
  • --filter "until=24h": limita la limpieza a imágenes creadas hace más de 24 horas.
Comando Qué elimina
docker image prune Solo imágenes huérfanas (<none>)
docker image prune -a Todas las imágenes sin contenedor que las use
docker rmi <imagen> Una imagen concreta que indiques

Inspeccionar Imágenes

docker inspect muestra información detallada de una imagen en formato JSON: capas, variables de entorno, comando por defecto, fecha de creación, etc.

docker inspect nginx:latest
  • Devuelve un JSON extenso con toda la metainformación de la imagen.

Para extraer un dato concreto sin leer todo el JSON, usa --format:

docker inspect --format '{{.Config.Cmd}}' nginx:latest
  • --format '{{.Config.Cmd}}': muestra solo el comando por defecto de la imagen.
docker inspect --format '{{.Os}}/{{.Architecture}}' nginx:latest
  • Muestra el sistema operativo y la arquitectura para la que se construyó la imagen.

Para ver el historial de capas de una imagen (qué instrucción creó cada una y su tamaño):

docker history nginx:latest
  • Muy útil para entender qué hace pesada a una imagen.

Exportar e Importar con save y load

A veces necesitas mover una imagen entre máquinas sin un registro (por ejemplo, a un servidor sin acceso a internet). Para eso existen docker save y docker load.

docker save -o miapp.tar miapp:1.0
  • docker save: empaqueta la imagen (con todas sus capas y metadatos) en un fichero .tar.
  • -o miapp.tar: indica el fichero de salida.
  • miapp:1.0: la imagen a exportar.

Después copias miapp.tar a la otra máquina (por USB, scp, etc.) y la cargas:

docker load -i miapp.tar
  • docker load: reconstruye la imagen a partir del .tar, conservando su nombre y tags originales.
  • -i miapp.tar: indica el fichero de entrada.

Es importante no confundir save/load con export/import:

Comando Sobre qué actúa Conserva capas y metadatos
docker save / docker load Una imagen Sí (historial, tags, capas)
docker export / docker import Un contenedor (su sistema de ficheros) No (aplana todo en una sola capa)
  • Para mover imágenes, usa save/load. export/import actúa sobre el sistema de ficheros de un contenedor y pierde el historial de capas.

Gestión del Espacio en Disco

Docker puede consumir mucho espacio entre imágenes, contenedores, volúmenes y caché de build. Para ver cuánto usa:

docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          12        3         4.2GB     3.1GB (73%)
Containers      5         2         150MB     90MB (60%)
Local Volumes   4         2         1.1GB     500MB (45%)
Build Cache     20        0         800MB     800MB (100%)
  • RECLAIMABLE indica cuánto espacio podrías liberar limpiando lo que no se usa.

Para una limpieza general de todo lo que no está en uso:

docker system prune
  • Elimina contenedores detenidos, redes no usadas, imágenes huérfanas y caché de build. Pide confirmación.

Para una limpieza más agresiva que incluya también todas las imágenes sin usar:

docker system prune -a
  • -a: añade a la limpieza las imágenes que no tengan ningún contenedor asociado.

Advertencia: docker system prune -a puede borrar imágenes que tardaste en descargar o construir y que quizá vuelvas a necesitar. Revisa siempre qué se va a eliminar antes de confirmar, especialmente en entornos compartidos.

Errores Comunes y Consejos

  • Intentar borrar una imagen en uso: si un contenedor (aunque esté detenido) usa la imagen, docker rmi falla. Elimina antes el contenedor o usa -f con cuidado.
  • Confundir save/load con export/import: el primero es para imágenes y conserva capas; el segundo es para contenedores y las aplana.
  • Acumular imágenes huérfanas: cada reconstrucción puede dejar capas <none>. Ejecuta docker image prune periódicamente.
  • Usar docker system prune -a sin pensar: borra muchas más cosas de las que crees. Lee el aviso de confirmación.
  • Olvidar docker system df: es la forma rápida de saber dónde se está yendo el espacio antes de limpiar.
  • Consejo: automatiza la limpieza de huérfanas y caché antigua con docker image prune -f --filter "until=168h" para borrar lo creado hace más de una semana.

Ejercicios

Ejercicio 1

Muestra solo las imágenes huérfanas (dangling) de tu sistema y luego elimínalas todas sin que Docker pida confirmación.

Ejercicio 2

Exporta la imagen miapp:1.0 a un fichero llamado backup.tar y describe cómo la cargarías en otra máquina.

Ejercicio 3

Quieres ver cuánto espacio total ocupa Docker y cuánto podrías recuperar. ¿Qué comando usarías y qué columna te interesa?

Soluciones

Solución 1

docker images --filter "dangling=true"
docker image prune -f

El primer comando lista las imágenes huérfanas. docker image prune borra precisamente esas, y -f evita la pregunta de confirmación.

Solución 2

docker save -o backup.tar miapp:1.0

Esto crea backup.tar. Tras copiarlo a la otra máquina (con USB, scp, etc.), se carga con:

docker load -i backup.tar

La imagen aparecerá en la otra máquina con su nombre y tag originales (miapp:1.0), conservando todas sus capas.

Solución 3

docker system df

La columna RECLAIMABLE indica cuánto espacio podrías liberar limpiando lo que no está en uso, y la columna SIZE muestra el total ocupado por cada tipo de recurso.

Conclusión

En esta lección hemos aprendido a gestionar las imágenes Docker durante todo su ciclo de vida: listarlas con docker images, eliminarlas con docker rmi, limpiarlas masivamente con docker image prune, inspeccionarlas con docker inspect y docker history, moverlas entre máquinas con docker save/docker load, y controlar el espacio en disco con docker system df y docker system prune. Mantener tu sistema ordenado evita sorpresas con el almacenamiento y facilita el trabajo diario.

En la siguiente lección, Etiquetado y Publicación de Imágenes, aprenderemos a compartir tus imágenes con el mundo o con tu equipo: las convenciones de tagging, el comando docker tag, cómo autenticarte con docker login y publicar con docker push en Docker Hub o en un registro privado, además del versionado semántico y las buenas prácticas.

© Copyright 2026. Todos los derechos reservados