Introducción
Docker facilita el empaquetado de aplicaciones y servicios en contenedores para que puedan ejecutarse en cualquier lugar. Sin embargo, al trabajar con Docker, también es fácil acumular cantidades excesivas de imágenes, contenedores y volúmenes de datos no utilizados que saturan la salida y consumen espacio en disco.
Docker ofrece todas las herramientas que necesita para limpiar su sistema desde la línea de comandos. Esta guía de estilo de hoja de trucos proporciona una referencia rápida a los comandos que son útiles para liberar espacio en el disco y mantener su sistema organizado al eliminar imágenes, contenedores y volúmenes de Docker no utilizados.
Como usar esta guia:
- Esta guía está en formato de hoja de referencia con fragmentos de línea de comandos independientes
- Vaya a cualquier sección relevante para la actividad que está intentando completar.
command $(command)
utilizada en los comandos está disponible en muchos shells populares como bash, zsh y Windows Powershell.
Elimine todas las imágenes, contenedores, volúmenes y redes no utilizados o suspendidos
Docker proporciona un solo comando que limpiará todos los recursos (imágenes, contenedores, volúmenes y redes) que se cuelgan (no asociados con un contenedor):
docker system prune
Para eliminar aún más los contenedores fijos y las imágenes no utilizadas (no solo imágenes pendientes), agregue la -a
al comando:
docker system prune -a
Eliminar imágenes de Docker
Elimina una o más imágenes específicas.
Utilice el comando de docker images
-a
para localizar el ID de las imágenes que desea eliminar. Esto le mostrará cada imagen, incluidas las capas intermedias de la imagen. Cuando haya localizado las imágenes que desea eliminar, puede pasar su ID o etiqueta a docker rmi
:
Lista de imágenes:
docker images -a
Eliminar imágenes:
docker rmi Image Image
Eliminar imágenes colgantes
Las imágenes de Docker se componen de varias capas. Las imágenes pendientes son capas que no tienen relación con ninguna imagen etiquetada. Ya no tienen un propósito y consumen espacio en disco. Se pueden encontrar agregando la marca de filtro, -f
con un valor de dangling=true
al comando de docker images
Cuando esté seguro de que desea eliminarlos, puede usar el comando de docker images purge
Nota: Si crea una imagen sin etiquetarla, la imagen aparecerá en la lista de imágenes pendientes porque no tiene asociación con una imagen etiquetada. Puede evitar esto proporcionando una etiqueta durante la creación, y puede etiquetar retroactivamente una imagen con el comando docker tag.
Enumere las imágenes pendientes:
docker images -f dangling=true
Eliminar imágenes pendientes:
docker image prune
Eliminar imágenes según un patrón
Puede encontrar todas las imágenes que coincidan con un patrón utilizando una combinación de docker images
de Docker y grep
. Una vez que esté seguro, puede eliminarlos usando awk
para pasar las ID a docker rmi
. Tenga en cuenta que Docker no proporciona estas utilidades y no están necesariamente disponibles en todos los sistemas:
Lista de imágenes con grep:
docker images -a | grep "pattern"
Elimina imágenes con grep y awk:
docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
Quitar todas las imágenes
Todas las imágenes de Docker en un sistema se pueden enumerar agregando -a
al comando de docker images
Una vez que esté seguro de que desea eliminarlos todos, puede agregar la -q
para pasar el ID de la imagen a docker rmi
:
Lista de todas las imágenes:
docker images -a
Eliminar todas las imágenes:
docker rmi $(docker images -a -q)
Retirar los contenedores
Retire uno o más contenedores específicos.
Use el docker ps
con la -a
para ubicar el nombre o ID de los contenedores que desea eliminar:
Enumere todos los contenedores:
docker ps -a
Retire todos los contenedores:
docker rm ID_or_Name ID_or_Name
Retire un contenedor a la salida
Si sabe cuando está creando un contenedor que no querrá conservarlo una vez que haya terminado, puede usar el docker run --rm
para eliminarlo automáticamente cuando salga.
Ejecutar y quitar:
docker run --rm image_name
Retirar todos los contenedores que hayan salido (apagado)
Puede ubicar contenedores usando docker ps -a
y filtrarlos según su estado: creado, reiniciado, en ejecución, en pausa o salido. Para revisar la lista de contenedores salidos, use la -f
para filtrar por estado. Después de verificar si desea eliminar esos contenedores, use la -q
para pasar las ID al comando docker rm
Enumere todos los contenedores "Salidos":
docker ps -a -f status=exited
Eliminar todos los contenedores "Salidos":
docker rm $(docker ps -a -f status=exited -q)
Retire los contenedores usando más de un filtro
Los filtros de Docker se pueden combinar repitiendo la marca de filtro con un valor adicional. Esto da como resultado una lista de contenedores que cumplen ambas condiciones. Por ejemplo, si desea eliminar todos los contenedores marcados como Creado (un estado que puede resultar cuando se ejecuta un contenedor con un comando no válido) o Salido, puede usar dos filtros:
Enumere los contenedores filtrados:
docker ps -a -f status=exited -f status=created
Retire los envases filtrados:
docker rm $(docker ps -a -f status=exited -f status=created -q)
Retire los contenedores de acuerdo con un esquema.
Puede encontrar todos los contenedores que coincidan con un patrón utilizando una combinación de docker ps
y grep
. Cuando esté satisfecho de tener la lista que desea eliminar, puede usar awk
y xargs
para proporcionar la ID al comando docker rmi
Tenga en cuenta que estas utilidades no las proporciona Docker y no están necesariamente disponibles en todos los sistemas:
Enumere los contenedores según un esquema:
docker ps -a | grep "pattern"
Retire los contenedores de acuerdo con un esquema:
docker ps -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
Deténgase y retire todos los contenedores.
Puede revisar los contenedores en su sistema con docker ps
. Agregar la -a
mostrará todos los contenedores. Cuando esté seguro de que desea eliminarlos, puede agregar la -q
para proporcionar los ID a los docker stop
y docker rm
:
Listar:
docker ps -a
Para eliminar:
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
Quite uno o más volúmenes específicos: Docker 1.9 y posterior
Utilice el docker volume ls
para ubicar el nombre o los nombres de volumen que desea eliminar. Luego, puede eliminar uno o más volúmenes con el comando docker volume rm
Enumere los volúmenes:
docker volume ls
Eliminar los volúmenes:
docker volume rm volume_name
Eliminar volúmenes suspendidos: Docker 1.9 y posterior
Debido a que el punto de los volúmenes debe ser independiente de los contenedores, cuando se retira un contenedor, un volumen no se elimina automáticamente al mismo tiempo. Cuando existe un volumen y ya no está unido a ningún contenedor, se denomina volumen colgante. Para encontrarlos y confirmar que desea eliminarlos, puede usar el docker volume ls
con un filtro para limitar los resultados a volúmenes suspendidos. Cuando esté seguro de la lista, puede eliminarlos todos con docker volume prune
:
Listar volúmenes suspendidos:
docker volume ls -f dangling=true
Para eliminar volúmenes suspendidos:
docker volume prune
Retire un recipiente y su volumen.
Si ha creado un volumen sin nombre, puede eliminarlo al mismo tiempo que el contenedor con el indicador -v
Tenga en cuenta que solo funciona con volúmenes sin nombre. Cuando el contenedor se retira con éxito, se muestra su ID. Tenga en cuenta que no se hace referencia a la eliminación del volumen. Si no tiene nombre, se elimina silenciosamente del sistema. Si es designado, permanece presente en silencio.
Para eliminar un recipiente y su volumen:
docker rm -v container_name
Conclusión
Esta guía cubre algunos de los comandos más comunes que se usan para eliminar imágenes, contenedores y volúmenes con Docker. Hay muchas otras combinaciones y banderas que se pueden usar con cada uno. Para obtener una guía completa de lo que está disponible, consulte la documentación de Docker docker system prune
docker rmi
, docker rm
y docker volume rm
.