Programa
¿Utilizas Docker y a menudo te encuentras sin espacio en disco? No estás sola.
Las imágenes Docker son los bloques de construcción de los contenedores Docker, pero pueden acumularse rápidamente y consumir espacio en disco. El tamaño de estas imágenes oscila entre unos pocos megabytes y varios gigabytes, por lo que un procedimiento de limpieza regular es esencial para un rendimiento óptimo del sistema.
Aquí está el resquicio de esperanza: Docker proporciona un par de comandos para ayudarte a eliminar imágenes innecesarias y recuperar espacio en disco. Si comprendes estos comandos y cuándo utilizarlos, es de esperar que desaparezcan todas las advertencias de falta de almacenamiento.
En este tutorial, te guiaré a través de diferentes métodos para eliminar imágenes Docker, te mostraré cómo manejar errores comunes durante el proceso de eliminación y compartiré las mejores prácticas para mantener un entorno Docker limpio.
>¿Totalmente nuevo en Docker? Esta guía práctica sobre contenedores te pondrá en marcha en un abrir y cerrar de ojos.
¿Qué es una imagen Docker?
Una imagen Docker es un paquete de software ligero, independiente y ejecutable que contiene todo lo necesario para ejecutar una aplicación: código, tiempo de ejecución, bibliotecas, variables de entorno y archivos de configuración.
Piensa en ello como una instantánea o plantilla utilizada para crear contenedores.
>Docker no sólo lo utilizan los Ingenieros de Software - ¡También lo adoran los Científicos de Datos!
Las imágenes Docker se construyen por capas, y cada capa representa un conjunto de cambios en el sistema de archivos. Cuando sacas una imagen de Docker Hub o build una utilizando un Dockerfile
, en realidad estás descargando o creando una pila de estas capas que funcionan juntas. Estas capas se almacenan en caché, lo que hace que construir y compartir imágenes sea más eficiente, pero también significa que consumen espacio de almacenamiento en tu máquina.
Las imágenes se vuelven especialmente problemáticas cuando estás desarrollando aplicaciones activamente. A menudo reconstruirás imágenes repetidamente con pequeños cambios, crearás varias versiones para probarlas y sacarás dependencias que quizá nunca se limpien automáticamente.
Antes de que te des cuenta, tendrás docenas o incluso cientos de imágenes consumiendo gigabytes del precioso -y limitado- espacio de la SSD.
>Si te dedicas a la Ciencia de Datos y al Machine Learning, debes conocer estas 12 imágenes Docker.
¿Por qué eliminar imágenes Docker?
En términos sencillos, las imágenes Docker pueden ser notorias devoradoras de espacio, y sólo puedes disponer de una cantidad limitada de espacio en disco.
Eliminar las imágenes Docker innecesarias tiene varias finalidades importantes:
- En primer lugar, recupera espacio de almacenamiento, lo que es especialmente crítico si trabajas en un portátil con capacidad limitada o en un entorno CI/CD con restricciones de almacenamiento. De alguna manera, esos errores de "No queda espacio en el dispositivo" siempre parecen aparecer en el peor momento posible.
- Al limpiar las imágenes también se eliminan las versiones obsoletas que podrían confundir a los desarrolladores o a los procesos de despliegue. No hay nada peor que utilizar accidentalmente una imagen antigua porque tu etiqueta
latest
apuntaba a algo inesperado. - Además, una lista de imágenes desordenada hace más difícil identificar en lo que realmente necesitas. Cuando ejecutas
docker images
y ves una pantalla llena de repositorios, etiquetas e identificaciones, encontrar la imagen concreta que buscas se convierte en un proceso lento. La limpieza periódica mantiene tu entorno de trabajo manejable y las salidas de tus comandos legibles. Es una pequeña mejora de la calidad de vida que se acumula con el tiempo.
A continuación, te mostraré un par de formas de abordar la eliminación de imágenes Docker.
Domina Docker y Kubernetes
Eliminar imágenes Docker
Ahora que ya sabes qué son las imágenes Docker y por qué es importante mantenerlas bajo control, vamos a sumergirnos en el proceso de eliminación propiamente dicho.
Docker proporciona un par de comandos para ayudarte a gestionar tus imágenes, desde listar lo que tienes hasta eliminar lo que no necesitas.
Comprobación de las imágenes Docker existentes
Antes de empezar a borrar imágenes, tienes que saber qué es lo que realmente está ocupando espacio en tu sistema. El comando docker images
es tu primer paso en este proceso de limpieza.
docker images
Este comando lista todas tus imágenes Docker junto con información valiosa como:
- Nombre del repositorio
- Etiqueta
- ID de imagen
- Fecha de creación
- Talla
Imagen 1 - Imágenes Docker disponibles
Mirar la columna del tamaño puede ser una buena forma de abrir los ojos. Como puedes ver en Imagen 1, ¡la imagen de la base de datos Oracle ocupa más de 15 GB!
Si quieres ordenar tus imágenes por tamaño para identificar las que ocupan más espacio:
docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | sort -h
Imagen 2 - Imágenes Docker disponibles ordenadas por tamaño
Esta es una visión más compacta, ya que no incluye todas las propiedades de la imagen.
Eliminar una imagen Docker específica
Una vez que hayas identificado las imágenes que no necesitas, puedes eliminarlas de una en una utilizando el comando docker rmi
(donde rmi
significa "eliminar imagen").
Puedes eliminar una imagen por su ID o por su combinación repositorio:etiqueta:
# Remove by image ID
docker rmi 4e7024df2f20
# Remove by repository:tag
docker rmi nginx:latest
Imagen 3 - Dos formas de eliminar imágenes Docker individuales
También vale la pena mencionar que Docker no te permitirá eliminar imágenes que estén siendo utilizadas por contenedores. Aparecerá un mensaje de error como
Imagen 4 - Intentando eliminar imágenes Docker que están en uso
Si ves esto, tienes que detener y eliminar cualquier contenedor dependiente antes de eliminar la imagen, o utilizar el comando forzar (de la que hablaré más adelante).
Eliminar varias imágenes Docker
Eliminar las imágenes una a una puede ser tedioso, especialmente durante una limpieza importante. Afortunadamente, Docker te permite eliminar varias imágenes con un solo comando.
Puedes proporcionar una lista de ID de imagen separados por espacios:
docker rmi postgres:latest mariadb:latest
Imagen 5 - Eliminar varias imágenes Docker
O, para escenarios más avanzados, combina docker images
con filtrado y canalización. Por ejemplo, ésta eliminará todas las imágenes con la etiqueta latest
:
docker rmi $(docker images --filter=reference="*:latest" -q)
Imagen 6 - Eliminar todas las imágenes Docker con una etiqueta específica
Bueno, todas menos las imágenes que utilizan actualmente los contenedores en ejecución.
Ten cuidado con estos comandos de eliminación masiva, ya que no piden confirmación. Siempre debes comprobar dos veces tus criterios de filtrado antes de pulsar Intro.
Eliminar imágenes colgantes y no utilizadas
Cuando reconstruyes una imagen, Docker crea nuevas capas para todo lo que ha cambiado y reutiliza las capas almacenadas en caché para las partes que no han cambiado. Las capas únicas de la versión anterior se vuelven "colgantes": existen en el disco pero no forman parte de ninguna imagen con nombre.
Puedes identificar las imágenes colgantes con:
docker images -f "dangling=true"
Imagen 7 - Listado de imágenes Docker colgantes
Ahora, ejecuta el comando prune
para eliminarlos todos a la vez:
docker image prune
Imagen 8 - Poda de imágenes Docker
Este comando te pedirá confirmación antes de continuar. Si estás seguro de que quieres eliminarlos todos:
docker image prune -f
Para una limpieza más agresiva, puedes eliminar tanto las imágenes colgantes como las no utilizadas (las que no usa ningún contenedor):
docker image prune -a
Imagen 9 - Eliminar todas las imágenes no utilizadas
Este último comando puede liberar mucho espacio, pero utilízalo con precaución, ya que eliminará todas las imágenes no referenciadas por contenedores en ejecución o parados.
>¿Qué es exactamente el comando Docker Prune? Le hemos dedicado un artículo entero, repleto de ejemplos.
Ahora que sabes cómo eliminar imágenes Docker, veamos algunos errores comunes que puedes encontrarte y cómo manejarlos.
Manejo de errores al eliminar imágenes Docker
Como ocurre con todo en el desarrollo de software, a veces te encontrarás con errores al intentar eliminar imágenes Docker.
La mayoría de estos errores se producen por buenas razones: las salvaguardas de Docker están diseñadas para evitar que rompas accidentalmente algo importante. Exploremos estos errores comunes y cómo abordarlos.
Error: La imagen está siendo utilizada por un contenedor
El error más común que encontrarás al eliminar imágenes Docker es algo parecido a esto:
Error response from daemon: conflict: unable to delete 64ba095c0f0e (cannot be forced) - image is being used by running container 0284660ca006
Esto ocurre porque la arquitectura de Docker tiene una estricta relación de dependencia entre los contenedores y las imágenes. Un contenedor es esencialmente una instancia en ejecución de una imagen con su propia capa de escritura encima.
¿Por qué Docker impide el borrado? Es sencillo: si eliminas una imagen mientras un contenedor basado en ella sigue funcionando, ese contenedor se bloqueará inmediatamente. Incluso los contenedores parados mantienen referencias a sus imágenes padre porque podrían reiniciarse más tarde.
Para eliminar una imagen de este tipo, empieza primero por listar todos los contenedores (incluidos los parados) que utilizan la imagen:
docker ps -a --filter ancestor=64ba095c0f0e
Imagen 10 - Todos los contenedores que utilizan la imagen
A continuación, puedes detener todos los contenedores:
docker stop 0284660ca006
Imagen 11 - Contenedores de parada
A continuación, puedes retirar los contenedores parados:
docker rm 0284660ca006
Imagen 12 - Quitar contenedores
Y por último, utiliza el conocido comando rmi
para eliminar la imagen:
docker rmi 64ba095c0f0e
Imagen 13 - Eliminar la imagen Docker
O, si prefieres un único comando de shell, utiliza éste:
docker ps -a --filter ancestor=090040f97aa1 -q | xargs docker rm -f && docker rmi 090040f97aa1
Imagen 14 - Hacerlo todo con un solo comando shell
Mucho más fácil, ¿verdad?
Forzar la eliminación de imágenes Docker
Si estás completamente seguro de que quieres eliminar una imagen independientemente de las dependencias, Docker proporciona la bandera -f
o --force
:
docker rmi -f 64ba095c0f0e
Imagen 15 - Forzar el borrado de imágenes Docker
La opción forzar indica a Docker que elimine la imagen aunque esté referenciada por contenedores u otras imágenes.
Sin embargo no eliminará las imágenes referenciadas por los contenedores en ejecución.
Forzar la eliminación debe ser tu último recurso, como cuando depures el propio Docker o cuando estés absolutamente seguro de que las dependencias pueden romperse con seguridad. En entornos de producción, casi nunca es la elección correcta.
Recuerda que los controles de dependencia de Docker existen por una razón. Trabajar con ellos en lugar de contra ellos dará como resultado una experiencia Docker más estable y predecible.
Buenas prácticas para gestionar imágenes Docker
Gestionar imágenes Docker no es una tarea puntual, sino una responsabilidad continua.
Establecer buenos hábitos y seguir las mejores prácticas te ahorrará limpiezas de emergencia cuando tu espacio en disco llegue repentinamente a cero. En esta sección, te guiaré a través de algunas estrategias que te ayudarán a mantener un entorno Docker limpio.
>¿Buscas una guía completa para aprender Docker? Nuestra guía para profesionales de los datos es un buen punto de partida.
Limpieza regular
Del mismo modo que no dejarías que los platos se acumularan en el fregadero durante semanas, no deberías dejar que las imágenes Docker no utilizadas se acumularan indefinidamente en tu sistema.
Un programa de mantenimiento regular es la forma más sencilla de evitar la hinchazón de imágenes. Dependiendo de lo activamente que utilices Docker, esto podría ser semanal, mensual o trimestralmente.
Durante estas sesiones de limpieza, debes
- Revisa las imágenes con
docker images
e identifica a los candidatos a la eliminación. - Comprueba si hay imágenes que no reconozcas o que no hayas utilizado recientemente.
- Busca versiones duplicadas de la misma aplicación.
- Elimina las imágenes innecesarias utilizando los comandos descritos anteriormente.
Muchos equipos de desarrollo también incorporan la limpieza de imágenes a sus canalizaciones CI/CD. Por ejemplo, puedes configurar Jenkins o las Acciones de GitHub para quelimpien automáticamente las imágenes de compilación que tengan más de cierta antigüedad.
Este comando sólo mostrará las imágenes que tengan más de 30 días:
docker images --format "{{.ID}}\t{{.CreatedAt}}" | awk '$2 < "'$(date -d '30 days ago' +'%Y-%m-%d')'"' | cut -f1
Utilizar la poda de imágenes Docker
Docker proporciona comandos de poda integrados que pueden automatizar gran parte del trabajo de limpieza manual.
El comando docker system prune
elimina de una vez todos los contenedores parados, las imágenes colgantes y las redes no utilizadas:
docker system prune
Para una limpieza más agresiva que elimine también las imágenes no utilizadas:
docker system prune -a
Incluso puedes recuperar espacio de las cachés de construcción:
docker builder prune
Estos comandos son perfectos para programar. He aquí un ejemplo sencillo de un script de limpieza que podrías ejecutar periódicamente:
#!/bin/bash
# Stop all containers
docker stop $(docker ps -q)
# Remove all stopped containers
docker container prune -f
# Remove all unused images
docker image prune -a -f
# Show remaining disk usage
docker system df
Imagen 16 - Script automatizado para la limpieza de Docker
Sólo recuerda utilizar la bandera -f
con cuidado en los scripts automatizados, ya que omite las solicitudes de confirmación.
Mantener organizadas las versiones de las imágenes
Una buena estrategia de etiquetado te ayudará a minimizar la acumulación de imágenes Docker innecesarias.
En lugar de utilizar siempre la etiqueta latest
(que puede volverse ambigua con el tiempo), considera estos enfoques:
- Utiliza el versionado semántico para tus imágenes:
myapp:1.0.0
myapp:1.0.1
myapp:1.1.0
- Incluir información de construcción en etiquetas:
myapp:build-2025-04-06
myapp:commit-a7f3d9e
- Añade calificadores de entorno o de finalidad:
myapp:1.0.0-dev
myapp:1.0.0-test
myapp:1.0.0-prod
Para los equipos más grandes, considera la posibilidad de implantar una política de registro de imágenes Docker que recoja automáticamente las imágenes antiguas tras un periodo determinado. Tanto Docker Hub como los registros privados como Harbor ofrecen funciones para gestionar los ciclos de vida de las imágenes.
Combinando estas buenas prácticas -limpieza periódica, poda automatizada y etiquetado organizado- mantendrás un entorno Docker mucho más saludable y evitarás esos temidos errores de "no queda espacio en el dispositivo".
Resumiendo la eliminación de imágenes Docker
Si eres un desarrollador que trabaja con contenedores, la gestión adecuada de imágenes Docker es una habilidad imprescindible.
Recuerda que la potencia de Docker proviene de su capacidad para aislar y empaquetar aplicaciones de forma eficiente, pero esta ventaja puede convertirse rápidamente en un inconveniente sin el mantenimiento adecuado.
Has aprendido por qué las imágenes Docker pueden volverse problemáticas con el tiempo, consumiendo un valioso espacio en disco y creando desorden en tu entorno de desarrollo. Has visto varios comandos para comprobar y eliminar imágenes, desde la selección de imágenes concretas con docker rmi
hasta la limpieza masiva con comandos de poda. También has visto los errores más comunes durante el proceso de eliminación y has aprendido a superarlos.
Si quieres aprender más sobre Docker y la contenedorización, estos cursos deberían ser tu próxima parada:
Domina Docker y Kubernetes
Preguntas frecuentes
¿Puedo recuperar una imagen Docker después de haberla borrado?
No, una vez que eliminas una imagen Docker con docker rmi
, no se puede recuperar a menos que tengas una copia de seguridad o puedas recuperarla de nuevo de un registro. Asegúrate siempre de que estás eliminando las imágenes correctas, especialmente en entornos de producción. Para las imágenes que hayas creado localmente, puede que tengas que reconstruirlas desde el archivo Dockerfile.
¿Qué son las imágenes Docker colgantes y cómo las elimino?
Las imágenes colgantes son capas que no pertenecen a ninguna imagen etiquetada, a menudo creadas cuando reconstruyes imágenes varias veces. Identifícalos con docker images -f "dangling=true"
y elimínalos todos a la vez con docker image prune
.
¿Cómo puedo liberar rápidamente espacio de Docker?
La forma más rápida de recuperar espacio es utilizar docker system prune -a
, que elimina todos los contenedores parados, las redes no utilizadas, las imágenes colgantes y las imágenes no utilizadas. Ten cuidado, ya que esto elimina todas las imágenes que no utilice ningún contenedor.
¿Con qué frecuencia debo limpiar mis imágenes Docker?
La frecuencia depende de lo activamente que utilices Docker. Para entornos de desarrollo con frecuentes compilaciones de imágenes, se recomiendan limpiezas semanales. Para los sistemas menos activos, debería bastar con un mantenimiento mensual o trimestral. Considera la posibilidad de establecer scripts de limpieza automatizados para mantener la coherencia.
¿Cuál es la diferencia entre eliminar y podar imágenes Docker?
La eliminación se dirige a las imágenes específicas que elijas, mientras que la poda limpia todas las imágenes no utilizadas o que cuelgan automáticamente basándose en determinados criterios.