Docker es una plataforma muy conocida que le permite gestionar para ejecutar y enviar sus aplicaciones como contenedores que empaquetan el sistema operativo y las bibliotecas dependientes junto con su aplicación juntos.

Vamos a cubrir la gestión de imágenes Docker, principalmente informando sobre las formas de listar imágenes Docker y obtener la información necesaria, y luego construir sobre ese aprendizaje para eliminar una o más imágenes de manera eficiente.

Así que vamos a empezar.

Listado de imágenes Docker

Para listar las imágenes Docker sacadas, utilice:

abhisheknair@geekflare:~$ docker image ls
REPOSITORIO ETIQUETA IMAGEN ID CREADO TAMAÑO
redis latest aa4d65e670d6 hace 9 días 105MB
mysql latest c60d96bd2b77 hace 10 días 514MB
ubuntu latest c29284518f49 hace 2 semanas 72.8MB
nginx latest 4cdc5dd7eaad hace 3 semanas 133MB
hello-world latest d1165f221234 hace 4 meses 13.3kB
redis 4.0 191c4017dcdd hace 15 meses 89.3MB
abhisheknair@geekflare:~$

Al igual que otros comandos docker, soporta el comando images con múltiples opciones.

 $ docker images [OPCIONES] [REPOSITORIO[:ETIQUETA]]

Si ejecuta docker images sin ninguna opción, le mostrará las imágenes de nivel superior como docker image ls, su repositorio y etiquetas y su tamaño en disco.

abhisheknair@geekflare:~$ docker images
REPOSITORIO ETIQUETA IMAGEN ID CREADO TAMAÑO
mysql latest c60d96bd2b77 hace 10 días 514MB
ubuntu latest c29284518f49 hace 2 semanas 72.8MB
nginx latest 4cdc5dd7eaad hace 3 semanas 133MB
hello-world latest d1165f221234 hace 4 meses 13.3kB
redis 4.0 191c4017dcdd hace 15 meses 89.3MB
abhisheknair@geekflare:~$

Estas imágenes tienen capas intermedias que aumentan la usabilidad, aceleran el proceso de compilación y reducen el uso de disco que no muestra el comando anterior. El TAMAÑO es el espacio combinado que ocupa la imagen y todas sus imágenes padre. Si guarda el contenido de la imagen como un archivo Tar cuando docker guarda una imagen, será igual a este tamaño listado.

Una imagen se lista varias veces si tiene varios nombres de repositorio o etiquetas aunque la única imagen identificada por su ID de IMAGEN utiliza el TAMAÑO listado sólo una vez.

Listar las imágenes más recientes

abhisheknair@geekflare:~$ docker images
REPOSITORIO ETIQUETA IMAGEN ID CREADO TAMAÑO
mysql latest c60d96bd2b77 hace 10 días 514MB
ubuntu latest c29284518f49 hace 2 semanas 72.8MB
nginx latest 4cdc5dd7eaad hace 3 semanas 133MB
hello-world latest d1165f221234 hace 4 meses 13.3kB
redis 4.0 191c4017dcdd hace 15 meses 89.3MB
abhisheknair@geekflare:~$

Listar imágenes por repositorio y etiqueta

Para listar todas las imágenes que pertenecen a un repositorio concreto, especifique el nombre del repositorio como

abhisheknair@geekflare:~$ docker images redis
REPOSITORIO ETIQUETA IMAGEN ID CREADO TAMAÑO
redis latest aa4d65e670d6 hace 9 días 105MB
redis 4.0 191c4017dcdd hace 15 meses 89.3MB
abhisheknair@geekflare:~$

Puede especificar adicionalmente el nombre del repositorio con una etiqueta para obtener una salida más filtrada:

abhisheknair@geekflare:~$ docker images redis:4.0
REPOSITORIO ETIQUETA IMAGEN ID CREADO TAMAÑO
redis 4.0 191c4017dcdd hace 15 meses 89.3MB
abhisheknair@geekflare:~$

Listar los ID de imagen completos

Para listar todas las imágenes sin truncar el ID de IMAGEN, utilice

abhisheknair@geekflare:~$ docker images --no-trunc
REPOSITORIO ETIQUETA IMAGEN ID CREADO TAMAÑO
redis latest sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 hace 9 días 105MB
mysql latest sha256:c60d96bd2b771a8e3cae776e02e55ae914a6641139d963defeb3c93388f61707 hace 10 días 514MB
ubuntu latest sha256:c29284518f497b8c5f49933e74e43ca5221e69c8251e780427f7d12f716625ff hace 2 semanas 72.8MB
nginx latest sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f hace 3 semanas 133MB
hello-world latest sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726 hace 4 meses 13.3kB
redis 4.0 sha256:191c4017dcdd3370f871a4c6e7e1d55c7d9abed2bebf3005fb3e7d12161262b8 hace 15 meses 89.3MB
abhisheknair@geekflare:~$

Listar compendios de imágenes

Las imágenes Docker que utilizan el formato v2 o posterior tienen un identificador de contenido conocido como digest. Para listar los valores del digest de la imagen, utilice la bandera --digest como:

abhisheknair@geekflare:~$ docker images --digests
REPOSITORIO ETIQUETA DIGEST IMAGEN ID CREADO TAMAÑO
redis latest sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 aa4d65e670d6 9 days ago 105MB
mysql latest sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd c60d96bd2b77 hace 10 días 514MB
ubuntu latest sha256:b3e2e47d016c08b3396b5ebe06ab0b711c34e7f37b98c9d37abe794b71cea0a2 c29284518f49 hace 2 semanas 72.8MB
nginx latest sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720 4cdc5dd7eaad hace 3 semanas 133MB
hello-world latest sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e d1165f221234 4 months ago 13.3kB
redis 4.0 sha256:2e03fdd159f4a08d2165ca1c92adde438ae4e3e6b0f74322ce013a78ee81c88d 191c4017dcdd hace 15 meses 89.3MB
abhisheknair@geekflare:~$

Con un registro 2. 0, puede utilizar estos compendios con los comandos push, pull, create, run y rmi. Esto también funciona con el comando FROM en un Dockerfile.

Filtrado de la salida

el comandodocker soporta el filtrado con imágenes utilizando la bandera --filter. Los filtros soportados actualmente son

  • dangling (booleano – verdadero o falso)
  • label (label=<key> o label=<key>=<value>)
  • before(<nombre-de-la-imagen>[:<etiqueta>], <identificador-de-la-imagen> o <imagen@digest>)– filtra las imágenes creadas antes del id o las referencias dadas
  • since(<nombre-de-la-imagen>[:], <identificador-de-imagen> o >)– filtra las imágenes creadas desde el id o las referencias dadas
  • referencia (patrón de una referencia de imagen) – filtrar imágenes cuya referencia coincida con el patrón especificado

Además, puede utilizar varios filtros combinándolos como

$ docker images --filter "<clave1>=<valor1>" --filter"<clave2>=<valor2>"

Ejemplo:

abhisheknair@geekflare:~$ docker images --filter "before=redis" --filter "since=hello-world"
REPOSITORIO ETIQUETA IMAGEN ID CREADO TAMAÑO
mysql latest c60d96bd2b77 hace 10 días 514MB
ubuntu latest c29284518f49 hace 2 semanas 72.8MB
nginx latest 4cdc5dd7eaad hace 3 semanas 133MB
abhisheknair@geekflare:~$

Formateo de la salida

las imágenes docker soportan el formateo de la salida que puede ser necesario para anidar con otros comandos, scripting, o de otra manera. Estos son los marcadores de posición soportados para la bandera --format:

Marcador de posiciónDescripción
.IDID de la imagen
.repositorioRepositorio de imágenes
.EtiquetaEtiqueta de imagen
resumenResumen de la imagen
.CreadoDesdeTiempo transcurrido desde que se creó la imagen
.CreatedAtHora de creación de la imagen
.TamañoTamaño del disco de la imagen

Como ejemplo, el siguiente comando imprime la salida sin cabeceras y muestra el ID y el Repositorio separados por dos puntos ( : ) para todas las imágenes:

abhisheknair@geekflare:~$ docker images --format "{{.ID}}: {{.Repositorio}}"
aa4d65e670d6: redis
c60d96bd2b77: mysql
c29284518f49: ubuntu
4cdc5dd7eaad: nginx
d1165f221234: hello-world
191c4017dcdd: redis
abhisheknair@geekflare:~$

O para listar todas las imágenes con su repositorio y etiqueta en formato de tabla, puede utilizar

abhisheknair@geekflare:~$ docker images --format "table {{.ID}}\t{.Repositorio}}\t{.Etiqueta}}"
IMAGEN ID REPOSITORIO ETIQUETA
aa4d65e670d6 redis latest
c60d96bd2b77 mysql más reciente
c29284518f49 ubuntu más reciente
4cdc5dd7eaad nginx más reciente
d1165f221234 hello-world más reciente
191c4017dcdd redis 4.0
abhisheknair@geekflare:~$

Eliminación de imágenes Docker

Para eliminar una o más imágenes Docker del sistema, utilizamos:

$ docker image rm [OPCIONES] IMAGEN [IMAGEN...]

Para eliminar una sola imagen, basta con especificar el nombre de la imagen:

abhisheknair@geekflare:~$ docker image rm redis
Sin etiquetar: redis:latest
Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59
Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7
Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2
Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9
Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e
Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d
Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68
abhisheknair@geekflare:~$

O para eliminar varias imágenes, especifique varios nombres de imagen separados por espacios:

abhisheknair@geekflare:~$ docker image rm redis mariadb
Sin etiquetar: redis:latest
Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59
Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7
Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2
Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9
Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e
Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d
Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68
Sin etiquetar: mariadb:latest
Untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d
Deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db
Deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba
Deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5
Deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa
Deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41
Deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2
Deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370
Deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6
Deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e
Deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0
Deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144
abhisheknair@geekflare:~$

Forzar la eliminación

Es posible que haya contenedores en ejecución que estén utilizando las imágenes que está intentando eliminar. En tales casos, Docker le emitirá una advertencia cuando intente eliminar una imagen referenciada.

abhisheknair@geekflare:~$ docker image rm nginx
Respuesta de error del demonio: conflicto: incapaz de eliminar la referencia del repositorio "nginx" (debe forzar) - el contenedor ce908eadf829 está utilizando su imagen referenciada 4cdc5dd7eaad
abhisheknair@geekflare:~$

Puede detener primero el contenedor asociado y luego volver a intentarlo o bien utilizar la bandera -f que fuerza la eliminación de la imagen (tenga cuidado).

abhisheknair@geekflare:~$ docker image rm nginx -f
Sin etiquetar: nginx:latest
Untagged: nginx@sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720
Deleted: sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f
abhisheknair@geekflare:~$

Podar imágenes

Hay ciertas situaciones en las que las imágenes no utilizadas están consumiendo espacio en disco o simplemente necesita una limpieza de viejas imágenes colgantes. Puede limpiar dichas imágenes no utilizadas utilizando:

$ docker image prune

Ejemplo:

abhisheknair@geekflare:~$ docker image prune
¡ATENCIÓN! Esto eliminará todas las imágenes colgantes.
¿Está seguro de que desea continuar? [y/N] y
Espacio total recuperado: 0B
abhisheknair@geekflare:~$

Si desea limpiar también todas las imágenes que no son utilizadas por ningún contenedor, utilice la bandera -a:

abhisheknair@geekflare:~$ docker image prune -a
¡ATENCIÓN! Esto eliminará todas las imágenes que no tengan al menos un contenedor asociado.
¿Está seguro de que desea continuar? [y/N] y
Imágenes eliminadas:
untagged: mariadb:latest
untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d
deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db
deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba
deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5
deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa
deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41
deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2
deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370
deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6
deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e
deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0
deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144
untagged: redis:latest
untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59
deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7
deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2
deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9
deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e
deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d
deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68

Espacio total recuperado: 445,2 MB
abhisheknair@geekflare:~$

También puede utilizar la bandera --force o -f para proceder a la limpieza sin confirmación o utilizar la bandera --filter para proporcionar valores de filtro (por ejemplo, ‘until=‘) al comando prune.

Ejemplo:

$ docker image prune -a --force --filter "until=2021-01-04T00:00:00"

O

$ docker image prune --filter="label=deprecated"

Uso del comando rmi

También puede utilizar el comando rmi con docker para eliminar imágenes.

Elimina (y des-etiqueta) una o más imágenes del nodo Docker. Si una imagen tiene varias etiquetas, el uso de este comando con la etiqueta como parámetro sólo elimina la etiqueta. Si la etiqueta es la única para la imagen, se eliminan tanto la imagen como la etiqueta.

Este comando no elimina imágenes de un registro. Además, no puede eliminar una imagen de un contenedor en ejecución a menos que utilice la opción -f como con el comando docker image rm.

Ejemplo:

abhisheknair@geekflare:~$ docker rmi alpine
Sin etiquetar: alpine:latest
Untagged: alpine@sha256:adab3844f497ab9171f070d4cae4114b5aec565ac772e2f2579405b78be67c96
Deleted: sha256:d4ff818577bc193b309b355b02ebc9220427090057b54a59e73b79bdfe139b83
Deleted: sha256:72e830a4dff5f0d5225cdc0a320e85ab1ce06ea5673acfe8d83a7645cbd0e9cf
abhisheknair@geekflare:~$

También puede utilizar --no-prune para especificar que no se eliminen los padres no etiquetados.

Detener el contenedor y eliminar imágenes

En muchas ocasiones, puede que necesite detener todos los contenedores y eliminar todas las imágenes asociadas. Puede hacerlo simplemente con

$ docker rm -vf $(docker ps -a -q)

El comando anterior detendrá y eliminará a la fuerza todos los contenedores en ejecución. A continuación, podemos proceder a eliminar las imágenes vinculadas mediante:

$ docker rmi -f $(docker images -a -q)

Resumen

Docker es una herramienta versátil que es una parte esencial del arsenal del ingeniero DevOps de hoy y es parte de otras tecnologías en boga como Kubernetes. La gestión de imágenes Docker es una de las partes esenciales de la gestión y resolución de problemas de un despliegue Docker.

Ahora debería tener una idea básica de las capacidades que ofrece el comando CLI de Docker con sus comandos como image, images y rmi. Sus banderas ofrecen una mayor personalización y ofrecen opciones avanzadas de filtrado y personalización que pueden ayudar en la automatización y el uso avanzado.

Utilice la ayuda de docker [COMANDO] para obtener más detalles sobre las opciones disponibles y los temas de ayuda relacionados.

More on DevOps