Las cosas pueden complicarse con bastante facilidad mientras se enfoca en implementar sus proyectos y probar cosas en contenedores Docker. Se encontrará con la necesidad de limpiar su espacio de trabajo de vez en cuando. Entonces, ¿por qué no mantener el entorno de Docker ordenado con la eliminación de imágenes de Docker y otros comandos útiles?
Este tutorial le enseñará las muchas maneras de mantener su entorno de Docker limpio y manejable, así como algunas mejores prácticas para dominar posibles complejidades.
¡Empecemos!
Requisitos
Para seguir este tutorial, debe tener a su disposición lo siguiente:
- Una PC con Windows 10:este tutorial usa Windows 10 y ejecutará los comandos de Docker en PowerShell, pero cualquier sistema operativo que ejecute Docker está bien.
- Docker:este tutorial utiliza Docker Desktop v3.6.0 para el host del contenedor.
- Un contenedor Docker existente para limpiar
Eliminación de imágenes de Docker
Un entorno de Docker consta de muchos componentes diferentes, desde imágenes, contenedores, redes, etc. Encontrará muchos componentes diferentes para limpiar. Comencemos este proceso de limpieza eliminando primero las imágenes antiguas que ya no necesita. Pero no se preocupe, si elimina imágenes y tiene un Dockerfile creado que necesita esas imágenes eliminadas, Docker las descargará automáticamente de nuevo.
Si necesita eliminar imágenes innecesarias que ha descargado en el pasado, el rm
El mando es tu amigo. Este comando elimina imágenes y contenedores, pero el tutorial se centrará primero en las imágenes.
Si actualmente tiene uno o más contenedores que usan la imagen que desea eliminar, primero debe detener los contenedores que usan esa imagen con
docker stop
dominio. Para obtener más información, consulte el artículo de ATA ¡Use contenedores Docker Stop sin arruinar las cosas!
Tenga en cuenta que no puede eliminar las imágenes de Docker a menos que detenga los contenedores que usan la imagen.
Para eliminar una imagen con docker rm
, primero debe encontrar la identificación de la imagen. Para hacerlo, ejecute docker image ls
dominio. La docker image ls
El comando lee Docker y devuelve todas las imágenes que tiene actualmente, incluido el ID de cada imagen.
También puede ejecutar las
docker images
comando para enumerar las imágenes creadas más recientemente.
docker image ls
A continuación, puede ver el resultado de docker image ls
comando en una lista de tablas con columnas REPOSITORIO , ETIQUETA , ID DE IMAGEN , CREADO y TALLA .
Una vez que conozca la ID de la imagen, proporcione esa ID de imagen al docker image rm
comando, como se muestra a continuación. Una vez que lo haya hecho, Docker eliminará la imagen con el ID especificado.
# Remove only the images with the specified image ID
docker image rm image_id
Eliminar imágenes de Docker 'colgantes'
A medida que comience a crear más contenedores y descargue más imágenes, es probable que tenga varias imágenes que no tengan un contenedor asociado. Estas imágenes se denominan imágenes "colgantes" o "extraviadas" y Docker no las utiliza actualmente.
Para ahorrar espacio en disco y mantener las cosas ordenadas, limpiemos todas estas imágenes colgantes. Para hacerlo, ejecuta docker image prune
. Este comando podas o elimine imágenes que no tengan un contenedor creado a partir de ellas.
docker image prune
Si desea eliminar TODAS las imágenes con un contenedor asociado o no, no necesita encontrar una identificación de imagen en particular; ejecute
docker image prune -a
volverse nuclear y eliminarlos a todos.
Eliminación de contenedores Docker
Una vez que haya limpiado sus imágenes de Docker, es hora de pasar a los contenedores. Afortunadamente, verá que la tarea de eliminar contenedores es similar a eliminar imágenes usando el rm
comando.
Primero, busque el ID del contenedor con docker container ls
comando para eliminar contenedores, como se muestra a continuación. Este comando devuelve todos los contenedores, incluido el ID DEL CONTENEDOR . El -al
El parámetro es opcional para mostrarle todos los contenedores (en ejecución o no) y solo la última versión de cada contenedor.
docker container ls -al # List all Docker containers
Una vez que conozca la ID del contenedor, ejecute docker rm
y pásele el ID del contenedor que desea eliminar.
# Remove only the containers with the specified container ID
docker rm container_id
También puede especificar más de un ID de contenedor separando cada ID con un espacio, como se muestra a continuación. Este comando elimina (rm
) los contenedores del tutorial Alpine y Docker 101 con ID de contenedor f8ec07177218
y 6fac840d9382
.
docker rm f8ec07177218 6fac840d9382
Eliminación de todos los contenedores Docker detenidos
Tal vez tenga muchos contenedores parados que simplemente están ocupando espacio. Al igual que las imágenes colgantes, los contenedores detenidos no sirven para nada en este momento.
Para eliminar todos los contenedores detenidos:
1. Ejecute el docker container prune
comando a continuación para enumerar todos (ls --all
) Contenedores Docker. Observe todos los contenedores con un ESTADO de Salió hace (X) Y horas . Todos estos contenedores están detenidos actualmente.
docker container ls --all
2. Ahora ejecute el docker container prune
Comando para eliminar todos los contenedores detenidos. Cuando se ejecuta este comando, verá qué ID de contenedor eliminó el comando.
docker container prune
3. Finalmente, ejecute docker container ls -a
nuevamente para ver que cada contenedor detenido fue removido.
Si prefiere no especificar una o más ID de contenedor manualmente, también puede anidar los comandos de Docker usando
$()
para enumerar los contenedores y eliminarlos en una línea condocker container rm $(docker container ls -aq)
. Eldocker container
El comando usa elq
cambiar para no devolver contenedores a la consola. Una vez que Docker recopila todos los contenedores, ejecutadocker container rm
contra cada uno.
Eliminación de contenedores Docker mediante reglas de filtrado
Tal vez tenga muchos contenedores diferentes, y eliminarlos por identificación sería una molestia. Si todos tienen algunas características comunes, puede crear un filtro para eliminar solo los contenedores que coincidan con una consulta específica.
Para eliminar varios contenedores que coincidan con una consulta específica, utilice el filter
parámetro o indicador de filtrado en la poda del contenedor docker container prune
dominio. Este parámetro le permite especificar un until
atributo para filtrar contenedores creados antes de una fecha o una label
argumento para hacer coincidir contenedores con/sin una etiqueta específica.
Por ejemplo, puede eliminar todos los contenedores detenidos que se hayan creado hace más de 10h
hace ejecutando el siguiente comando.
docker container prune --filter "until=10h"
Introduzca Y para confirmar la eliminación del contenedor Docker, como se muestra a continuación. Una vez que se complete la eliminación, verá qué contenedores se eliminan y el espacio total recuperado.
Limpiar contenedores anidando comandos de Docker
Todos los comandos anteriores cubiertos requerían que detuvieras cada contenedor de antemano. Pero, ¿y si los contenedores se están ejecutando? En lugar de detener cada contenedor individualmente, puede anidar los comandos de Docker en un comando de eliminación para detener todos los contenedores y eliminarlos simultáneamente.
Tome precauciones adicionales al retirar los contenedores en funcionamiento. La eliminación puede afectar a alguna aplicación o proceso que dependa de ese contenedor Docker.
La ventana acoplable anidada ($(docker container
) El siguiente comando enumera todos los contenedores en silencio (-aq
) en la memoria, incluidos los que se están ejecutando actualmente. Luego, la lista de contenedores se pasa al docker container prune
externo. comando para eliminar (rm
) los contenedores de la lista.
Puede ver a continuación que ejecutar el comando anidado elimina todos los contenedores de una sola vez, como se muestra a continuación. Entonces, cuando verifique la lista de contenedores, no obtendrá un resultado ya que la lista está vacía.
Eliminar contenedores automáticamente con --rm
Bandera
Los comandos anteriores se usan para eliminar contenedores de Docker solo después de que la lista de Docker se haya saturado. Pero, ¿por qué esperar a que la lista de Docker esté abarrotada? Si usted es un tipo de trabajador que "limpia sobre la marcha", la medida de limpieza preventiva está al alcance de su mano con el --rm
bandera.
El --rm
marca en una docker run
El comando es útil si solo está probando cosas en su máquina por un breve tiempo y no maneja archivos críticos o implementaciones dentro de ese contenedor.
La docker run
La siguiente sintaxis del comando agrega un contenedor Docker con el nombre de su elección (container_name
) y una imagen de Docker (organization/base_image
) de la biblioteca Docker Hub. Pero entonces el --rm
flag elimina el contenedor automáticamente.
docker run --rm --name container_name organization/base_image
Limpieza de volúmenes de Docker
Docker no consiste solo en imágenes y contenedores. El ecosistema de Docker también consta de volúmenes de almacenamiento. Con el mismo método general para encontrar ID y eliminar elementos, también puede limpiar los volúmenes de almacenamiento.
Al igual que con los contenedores y las imágenes, ejecute docker volume ls
para ver todos los ID de volumen que tiene en el sistema.
docker volume ls
A continuación, puede ver que en este tutorial hay tres volúmenes enumerados.
Ahora ejecuta el docker container prune
comando a continuación para eliminar todos los volúmenes no utilizados (volume prune
).
Para eliminar redes docker no utilizadas, ejecute este comando en su lugar:
docker network prune
docker volume prune
A continuación, puede ver que el comando elimina todos los volúmenes locales, ya que no estaban en uso en el momento de la eliminación. Entonces, cuando enumera todos los volúmenes de Docker, solo obtiene una lista de tablas vacía.
Eliminar todos los componentes de Docker no utilizados a la vez
A lo largo de este tutorial, ha estado seleccionando y eligiendo qué componentes de Docker quitar. Tal vez esté trabajando en un entorno de prueba y solo quiera limpiar todo de una vez. En lugar de limpiar cada componente individualmente, límpielo todo con docker system prune
!
La poda del sistema docker container prune
El comando elimina los contenedores que no se ejecutan, las redes no utilizadas, las imágenes no utilizadas y la caché de compilación para el motor Docker.
docker system prune
Agregue agregue el
-f
marcar para forzar o suprimir los mensajes de advertencia y confirmar la eliminación de los elementos del sistema Docker, como este:docker system prune -f
A continuación, puede ver un mensaje que le pregunta si desea continuar eliminando elementos del sistema Docker o no. Confirme ingresando Y para continuar.
Conclusión
En este tutorial, ha explorado las numerosas formas de limpiar las imágenes de Docker con docker image prune
comando, eliminando contenedores con docker container rm
y más.
Con este nuevo conocimiento, ¿por qué no desarrollar sus propios métodos preferidos para limpiar sus imágenes de Docker? ¿Quizás hacer un inventario de activos de Docker o un buen sistema de etiquetado que le permita nombrar sus proyectos correctamente y evitar eliminar imágenes o contenedores críticos?