Eliminar imágenes Docker | all, force, none tag, cache, Docker Hub
Este post cubre siete puntos clave sobre el borrado de imágenes Docker.
Centrándonos en el comando docker image rm
, cubriremos casi todos los tipos de métodos de borrado de imágenes Docker, incluyendo el borrado de imágenes específicas, forzar el borrado, borrado completo, borrado de imágenes no utilizadas, borrado de dag, borrado de build cache, e incluso borrado de imágenes docker hub.
1. Comandos de borrado de imágenes específicas de Docker
Los comandos para eliminar una o más imágenes de Docker tienen el siguiente formato básico.
docker image rm [OPTIONS] IMAGE [IMAGE...]
Actúa como el comando docker rmi
en el antiguo esquema de comandos, con el nombre de la imagen, su nombre y etiquetas, y el ID de la imagen en la posición IMAGE
.
Las opciones disponibles incluyen --force
, que realiza un borrado forzado, y --no-prune
, que no elimina la imagen padre.
Para eliminar una imagen específica de Docker, no debe ser utilizada por ningún contenedor en ejecución. Por lo tanto, puede eliminar una imagen emitiendo el siguiente comando contra dicha imagen.
Si quisieras eliminar la última versión de la imagen nginx, ejecutarías el siguiente comando.
$ docker image rm nginx:latest
Untagged: nginx:latest
Untagged: nginx@sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305
Deleted: sha256:f9c14fe76d502861ba0939bc3189e642c02e257f06f4c0214b1f8ca329326cda
Deleted: sha256:419f8948c50c723f2a5ac74428af3d804b5d0079d6df8f7f827663cf10cbc366
Deleted: sha256:1030aac4f1a8096ed58d3d4a2df55dd1b1b27d919ad156d97ad1f68081d0051a
Deleted: sha256:7d90b49d96c3036539ef144ecc27c01de03902d8ea166a0f7b77d11d3779c4bd
Deleted: sha256:551acb210764654af31b6cd51adaa74edc9a202587c3395fe0e9f95a2e097f8b
Deleted: sha256:3c530958db4c75c6fb409f339367aaf9a1e163c84718c035d4b09bebc83f43e7
Deleted: sha256:8cbe4b54fa88d8fc0198ea0cc3a5432aea41573e6a0ee26eca8c79f9fbfa40e3
Puede borrar por nombre de imagen, como se muestra arriba, o por ID de imagen, como se muestra abajo.
$ docker image ls ubuntu:latest
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 3b418d7b466a 5 weeks ago 77.8MB
$ docker image rm 3b418d
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:dfd64a3b4296d8c9b62aa3309984f8620b98d87e47492599ee20739e8eb54fbf
Deleted: sha256:3b418d7b466ac6275a6bfcb0c86fbe4422ff6ea0af444a294f82d3bf5173ce74
Deleted: sha256:b8a36d10656ac19ddb96ef3107f76820663717708fc37ce929925c36d1b1d157
2. Borrado forzado de imágenes
Como se mencionó brevemente en la Sección 1, hay tres casos principales en los que no es posible borrar una imagen Docker.
En estos casos, necesitarás usar la opción --force
para forzar el borrado. Echemos un vistazo a los tres casos más comunes en los que el borrado no es posible.
2.1. Cuando el borrado de una imagen Docker falla
- La imagen está siendo utilizada por un contenedor en ejecución: Por defecto, Docker no permite borrar una imagen que está siendo utilizada por un contenedor en ejecución/parado. Para eliminar una imagen de este tipo, primero debe detener o eliminar ese contenedor.
- La imagen es el padre de otra imagen: Las imágenes Docker son una colección de capas, y una imagen puede ser la base de otra imagen. En este caso, si intenta eliminar la imagen subyacente, la operación será rechazada. Para resolver este problema, primero debe eliminar todas las imágenes dependientes.
- Docker se está quedando sin espacio en disco: Es posible que Docker utilice temporalmente espacio de disco adicional durante el proceso de eliminación de una imagen. Si se queda sin espacio en disco, la eliminación de una imagen podría fallar.
En esta situación, debe intentar eliminar la imagen de nuevo después de solucionar el problema. Por ejemplo, detenga o elimine el contenedor en ejecución, elimine cualquier imagen secundaria que utilice la imagen principal o libere espacio en disco si es necesario.
En algunos casos, sin embargo, puedes acabar perdiendo mucho tiempo y dinero intentando resolver la situación. Si lo estás usando para desarrollo, o para responder a lo inesperado, puede que quieras proceder con un borrado forzado.
2.2. Cómo forzar el borrado de imágenes
Forzar el borrado de una imagen es fácil. Basta con añadir la opción --force
al comando rm
.
Aquí tenemos la imagen utilizada por el contenedor estancado. Veamos el resultado de un borrado forzado.
$ docker image rm php:7
Error response from daemon: conflict: unable to remove repository reference "php:7" (must force) - container 086591af79a4 is using its referenced image 0b50b7a54cab
$.docker image rm --force php:7
Untagged: php:7
Untagged: php@sha256:a4325b962bf0ced295f9f6ea275837f504109fcb8497cb0fd340094bc5b5f29f
Deleted: sha256:0b50b7a54cab40ebbb65919b3502dbff938bbdaa6c4e18339d73745fc73ccdf5
Obtuve un error cuando intenté un borrado normal, pero el borrado forzado se completó con éxito.
3. Borrar completamente las imágenes no utilizadas (none)
Cuando descargues múltiples imágenes Docker o construyas tus propias imágenes del kernel, naturalmente acumularás imágenes con nombres de imagen de <none>
.
Estas son imágenes intermedias creadas para optimizar la velocidad de construcción de imágenes o el tamaño de salida.
Lo más probable es que se trate de imágenes no utilizadas.
Docker proporciona un comando para eliminar todas estas imágenes colgantes a la vez. Se llama docker image prune
.
Actualmente, verás muchas imágenes <none>
en la lista, como se muestra a continuación.
Después de escribir el comando
prune
y responder afirmativamente a la pregunta, la eliminación se llevará a cabo como se muestra a continuación.
Si hay alguna imagen que no se haya eliminado en este proceso, lo más probable es que sea por alguna de las tres razones que vimos en Sección 2.1.
4. Borrar todas las imágenes completamente
Esto no es recomendable, pero si quieres borrar completamente todas las imágenes de tu entorno local, independientemente de su estado, puedes utilizar el siguiente método.
$ docker image rm --force $(docker image ls --all --quiet)
El comando docker image ls --all --quiet
simplemente imprime una lista de todos los IDs de imagen en el entorno local, y la sintaxis $()
en el script de shell se utiliza para pasar la lista de IDs como argumento al comando anterior.
El comando rm
tiene una opción --force
que le permite borrar imágenes en cualquier estado.
Asegúrese de hacer una copia de seguridad de sus imágenes antes de utilizar estos comandos para evitar borrar accidentalmente imágenes importantes.
5. Borrar etiquetas de imagen
El comando para eliminar una etiqueta de imagen es docker image rm
. Si sientes que algo está mal, estás en lo cierto.
Es lo mismo que el comando para borrar una imagen específica, y Docker no proporciona un comando separado para borrar etiquetas.
En Docker, sólo se puede eliminar una etiqueta de imagen si la imagen tiene varias etiquetas. Si la imagen no tiene otras etiquetas, se elimina toda la imagen. Sin embargo, si la imagen tiene varias etiquetas, sólo se eliminará la etiqueta especificada por el comando, y la imagen seguirá existiendo.
To see this in action, let's add a new tag to an Nginx image. To add a new tag to an image, use the docker image tag
command.
$ docker image tag nginx:latest nginx:my-tag
$ docker image ls nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f9c14fe76d50 6 days ago 143MB
nginx my-tag f9c14fe76d50 6 days ago 143MB
Hemos añadido una nueva etiqueta llamada my-tag
a la imagen nginx:latest
, y cuando ejecutamos el comando ls
vemos dos etiquetas con el mismo ID de imagen.
Vamos a eliminar la etiqueta my-tag
.
$ docker image rm nginx:my-tag
Untagged: nginx:my-tag
$ docker image ls nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f9c14fe76d50 6 days ago 143MB
nginx 1.21 f8f4ffc8092c 20 months ago 133MB
Como la imagen Nginx en cuestión tenía múltiples etiquetas, puedes ver que sólo se borran las etiquetas y la imagen sigue existiendo.
Del mismo modo, para cambiar las etiquetas de la imagen, puede eliminar la imagen y reconstruir la misma imagen con nuevas etiquetas. Alternativamente, puede añadir una nueva etiqueta y eliminar la etiqueta existente de la imagen.
Borrar una etiqueta en una imagen Docker hace imposible encontrar imágenes asociadas con esa etiqueta, por lo que es importante comprobar si la imagen tiene otras etiquetas antes de borrarla.
6. Borrar la caché de creación de imágenes
Cuando Docker construye una imagen, guarda los resultados de los pasos intermedios como caché para reutilizarlos la próxima vez que construya. Esta caché ocupa espacio en disco, por lo que debe borrarla cuando sea necesario.
Para borrar la caché de construcción de Docker, utilice el comando docker builder prune
:
Este comando borrará todas las cachés de compilación no utilizadas. Si quieres borrar todas las cachés de compilación existentes, puedes ejecutarlo con la opción --all
.
Borrar cachés puede aumentar el espacio en disco en su entorno local, pero también puede aumentar el tiempo de compilación de la imagen. Es un buen proceso pensar en estas compensaciones mientras ejecuta el comando.
7. Borrar una imagen Docker Hub
Este es el proceso para eliminar una imagen de Docker Hub.
- Inicia sesión en Docker Hub.
- haz clic en Repositorios.
- Haga clic en el repositorio que contiene la imagen que desea eliminar.
- Navegue hasta la pestaña Etiquetas.
- Haga clic en el botón Eliminar situado a la derecha de la etiqueta que desea eliminar.
- En la ventana emergente, haga clic en Eliminar para eliminar la etiqueta, o haga clic en Eliminar todas las etiquetas para eliminar todas las etiquetas del repositorio.
Nota: Cuando elimina una imagen de Docker Hub, se elimina permanentemente de Docker Hub. No se puede restaurar, por lo que recomendamos hacer una copia de seguridad si es necesario antes de eliminarla.
8. Reflexiones finales
En este post, hemos cubierto siete puntos clave sobre la eliminación de imágenes Docker. En particular, hemos cubierto casi todos los tipos de métodos de borrado de imágenes, incluyendo el borrado de imágenes específicas, borrado forzado, borrado completo, borrado de imágenes no utilizadas, borrado de dags, borrado de build cache, e incluso borrado de imágenes Docker Hub. Esperamos que esto te ayude con tu proceso de borrado de imágenes Docker.
