¿Qué son las imágenes colgantes de Docker?

Las imágenes colgantes de Docker son capas sin etiquetar y sin usar que existen en el sistema de archivos de su host. Es posible que no se dé cuenta de su presencia y, por lo general, son basura no deseada.

En este artículo, aprenderá cómo surgen las imágenes colgantes y qué puede hacer para limpiarlas. Es una buena idea inspeccionar periódicamente cuántas imágenes pendientes tiene para evitar desperdiciar la capacidad de su disco.

Índice de contenidos
  1. ¿Qué es una imagen colgante?
  2. ¿Cómo se crean las imágenes colgantes?
  3. ¿Puedes usar una imagen colgante?
  4. Limpieza de imágenes colgantes
  5. Resumen

¿Qué es una imagen colgante?

Una imagen colgante es simplemente una imagen sin usar que no tiene nombre ni etiqueta. Puede detectar fácilmente imágenes colgantes cuando ejecuta el docker images comando porque aparecen como <none>:<none>.

En este ejemplo, la primera imagen de la lista es una imagen colgante:

$ docker images
<none>                              <none>    509bc96b727d   2 months ago    55.3MB
mysql                               5.7       f26e21ddd20d   4 months ago    450MB
gcr.io/k8s-minikube/kicbase         v0.0.30   1312ccd2422d   6 months ago    1.14GB
hello-world                         latest    feb5d9fea6a5   11 months ago   13.3kB

La imagen no está etiquetada pero aún permanece en su sistema. En este caso, se consumen 55,3 MB de espacio en disco.

Puede verificar que la imagen está colgando y no solo sin usar verificando si algún contenedor hace referencia a ella:

$ docker ps -a
CONTAINER ID   IMAGE                                      COMMAND                  CREATED          STATUS                   
2aa683500ee0   gcr.io/k8s-minikube/kicbase:v0.0.30        "/usr/local/bin/entr..."   18 hours ago     Exited (130) 18 hours ago

Ningún contenedor hace referencia a la <none>:<none> imagen con identificación 509bc96b727d así que definitivamente está colgando. Tenga en cuenta que las imágenes MySQL y Hello World no class como colgantes: a pesar de que los contenedores no los utilizan, están etiquetados correctamente, por lo que se supone que querrá conservarlos.

¿Cómo se crean las imágenes colgantes?

Las imágenes colgantes generalmente se crean cuando una imagen existente es reemplazada por una nueva compilación. Aquí hay un Dockerfile simple para demostrar lo que sucede:

FROM alpine:latest
COPY demo.txt /demo.txt

Crea un archivo llamado demo.txt en su directorio de trabajo y agregue algo de contenido:

$ echo 1 > demo.txt

Ahora construye tu imagen con docker build:

$ docker build -t demo:latest .

ejecutar el docker images Comando para ver tu nueva imagen:

REPOSITORY                          TAG       IMAGE ID       CREATED          SIZE
demo                                latest    40395b6c1362   24 seconds ago   5.54MB

Ahora modifique el contenido de demo.txt y reconstruir su imagen:

$ echo 2 > demo.txt
$ docker build -t demo:latest .

Se utiliza la misma etiqueta de imagen: demo:latest - por lo que esta compilación reemplaza a la primera. Correr docker images para ver el efecto:

REPOSITORY                          TAG       IMAGE ID       CREATED         SIZE
demo                                latest    3d5052e52b4c   3 seconds ago   5.54MB
<none>                              <none>    40395b6c1362   59 seconds ago   5.54MB

La nueva imagen ha sido creada con ID 3d5052e52b4c y el demo:latest etiqueta. La primera imagen, DNI 40395b6c1362, todavía existe pero no se ha etiquetado. Ahora se muestra como <none>:<none>. Esta imagen se ha convertido en una imagen colgante ya que ningún contenedor la usa.

¿Puedes usar una imagen colgante?

Las imágenes colgantes funcionan como cualquier otra imagen. La única diferencia es la etiqueta que falta. Puede iniciar un contenedor a partir de una imagen colgante haciendo referencia directamente al ID de la imagen:

$ docker run -it 40395b6c1362 sh
/ #

Técnicamente, la imagen ya no cuelga, porque ahora un contenedor la usa activamente. Es común que los contenedores terminen con un none imagen si elimina o reconstruye la etiqueta que usaron. Los contenedores con una imagen sin etiquetar mostrarán el ID de la imagen en el IMAGE columna cuando corres docker psen lugar de la etiqueta habitual.

$ docker ps
CONTAINER ID   IMAGE                                      COMMAND                  CREATED         STATUS        PORTS                NAMES
26d5609ba75c   40395b6c1362                               "sh"                     2 seconds ago   Up 1 second                        inspiring_lederberg
91ab866b59a2   portainer/portainer-ce                     "/portainer"             2 weeks ago     Up 2 days     8000/tcp, 9443/tcp   portainer_portainer_1

Limpieza de imágenes colgantes

Puede eliminar una sola imagen colgante utilizando el docker rmi comando, como cualquier otra imagen. Debido a que la imagen no se etiquetará, deberá identificarla por su ID.

$ docker rmi 40395b6c1362

Una mejor manera de limpiar muchas imágenes colgantes es la docker image prune dominio. Esto eliminará automáticamente todas las imágenes colgantes en su host Docker.

$ docker image prune
Total reclaimed space: 5.54 MB

La salida del comando muestra la cantidad de espacio en disco que se liberó. Compruebe si sus imágenes están realmente colgando si no se elimina nada. No es posible eliminar las imágenes utilizadas activamente por los contenedores. Deberá eliminar los contenedores con docker rm primero, antes de intentar podar sus imágenes.

Podría encontrar que tiene una imagen pendiente que realmente desea reutilizar en el futuro. En esta situación, puede volver a etiquetarlo con el docker tag dominio. Esto hará que la imagen sea más fácil de identificar y evitará que sea objeto de futuras operaciones de poda.

$ docker tag 40395b6c1362 demo:latest

Imágenes que se muestran como <none>:<none> puede que no sean imágenes colgantes. De manera confusa, esta situación también ocurre para las imágenes creadas como capas intermedias durante una construcción.

Cada paso en un Dockerfile da como resultado la creación de una nueva capa intermedia. A la imagen producida al final de la compilación se le asigna la etiqueta que especifique. Las otras capas intermedias permanecen sin etiquetar y se pueden ver ejecutando docker images -a.

Estas capas no son imágenes colgantes porque las imágenes posteriores en la cadena de construcción dependen de ellas. Son referenciados por cada capa sucesiva y no causan un problema de espacio en disco. Puede evitar que las capas intermedias se conserven en el disco al incluir el --rm marca en el momento de la compilación:

$ docker build --rm -t demo:latest .

Resumen

Las imágenes colgantes son imágenes de Docker sin etiquetar que no usa un contenedor ni depende de un descendiente. Por lo general, no sirven para nada, pero aún consumen espacio en disco. Acumulará imágenes colgantes cuando reemplace una etiqueta existente al comenzar una nueva compilación.

Todas las imágenes colgantes se muestran como <none>:<none> en la CLI de Docker. Tener demasiados de ellos puede ser abrumador cuando tienes docenas de imágenes sin información sobre su verdadera identidad. Corriendo regularmente docker images prune evitará el desperdicio de espacio en disco y dará como resultado una lista de imágenes más corta.

Descubre más contenido

Subir Change privacy settings