Elimine imágenes, volúmenes y contenedores de Docker en segundos
Publicado: 2023-03-03Docker es una tecnología de contenedorización de software que ayuda a los desarrolladores a crear e implementar aplicaciones en plataformas dispares que van desde el escritorio hasta la nube.
Una instantánea, o modelo, del código fuente, las dependencias y las herramientas necesarias para crear una aplicación dentro de un contenedor Docker se conoce como imagen. Las aplicaciones de Docker que requieren datos persistentes pueden depender de volúmenes de almacenamiento que son independientes del sistema operativo subyacente.
La organización eficaz de imágenes, volúmenes y contenedores es importante cuando se utiliza Docker. Las encarnaciones no utilizadas de estos activos pueden acumularse, ocupando un valioso espacio en el disco y eventualmente afectando el rendimiento del sistema.
Este artículo explora diferentes formas de mantener la organización del sistema borrando imágenes (tanto individualmente como todas a la vez), volúmenes y contenedores. Y usaremos la interfaz de línea de comandos (CLI) docker
para completar estas tareas rápidamente.
Cómo eliminar imágenes de Docker
Eliminar imágenes obsoletas o innecesarias de Docker es esencial para mantener un sistema limpio y organizado. Veamos cómo la CLI puede apuntar a ciertas imágenes para su eliminación.
Primero, veamos las imágenes en un entorno Docker con el comando docker image ls
:
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my_image latest 2cbc27836df4 60 seconds ago 7.05MB <none> <none> 85b412789704 2 days ago 7.05MB demo latest 26d80cd96d69 15 months ago 28.5MB
La lista de imágenes de arriba ha revelado imágenes llamadas my_image y demo , ambas etiquetadas como últimas . Una tercera imagen no tiene nombre ni etiqueta. En este caso, es una imagen "colgante": una que no está siendo utilizada actualmente por un contenedor. Esta imagen colgante resultó de una reconstrucción de my_image (un escenario común). La versión anterior de la imagen todavía está en el sistema de archivos, pero ahora no está en uso.
La lista también muestra los primeros 12 caracteres del ID de 64 caracteres de cada imagen, las fechas de creación y el espacio de almacenamiento que consumen las imágenes.
Eliminar todas las imágenes no utilizadas
En el ejemplo de listado anterior, tenemos una imagen colgante. Sin embargo, es posible que una imagen sin nombre o etiqueta esté activa. Por ejemplo, podría haberse utilizado para iniciar un contenedor haciendo referencia a su ID.
Para eliminar de forma segura todas las imágenes que realmente cuelgan, puede usar el comando docker image prune
:
$ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y Deleted Images: deleted: sha256:85b412789704c17e9c5e7edc97b2f64c748bbdae7eaa44d3fe2cc21a87acad3d Total reclaimed space: 7.05MB
Volveremos a listar nuestras imágenes para ver los resultados de nuestro trabajo:
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my_image latest 2cbc27836df4 70 seconds ago 7.05MB demo latest 26d80cd96d69 15 months ago 28.5MB
Tras el proceso de poda, la imagen sin nombre ni etiqueta ha desaparecido.
Eliminar una imagen específica por nombre
Puede orientar una imagen para su eliminación haciendo referencia a su nombre:
$ docker image rm <image_name>
Nota: no puede eliminar fácilmente las imágenes que todavía están en uso. Debe detener o eliminar los contenedores en ejecución que utilizan las imágenes. Si bien no suele recomendarse, puede forzar la eliminación de una imagen activa usando el indicador -f
:
$ docker image rm <image_name> -f
Uso de la abreviatura rmi para eliminar imágenes
La CLI de Docker tiene un enfoque abreviado para eliminar imágenes en el alias rmi
. Su uso para eliminar una imagen por nombre se ve así:
$ docker rmi demo Untagged: demo:latest Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4
Usaremos rmi
para los siguientes ejemplos de eliminación de imágenes.
Eliminar todas las imágenes sin etiquetar
Las imágenes sin etiquetar siguen ocupando un valioso espacio en el disco, lo que ralentiza cada vez más el sistema con el tiempo.
Para eliminar todas las imágenes sin etiquetar en Docker, use el comando docker rmi
con un filtro. Puede proporcionar filtros basados en criterios específicos usando la opción -f
(que no debe confundirse con el indicador -f
disponible para image rm
para forzar una acción).
El filtro dangling=true
se usa para identificar imágenes sin etiquetar:
$ docker rmi $(docker images -f "dangling=true" -q)
La opción -q
en el comando anterior muestra los ID de imagen de todas las imágenes sin etiquetar. Luego, todos estos ID se pasan como argumentos a docker rmi
para eliminarlos.
Este filtro usa la palabra clave "colgando", pero como se indicó anteriormente, algunas imágenes sin etiquetas pueden estar activas. Se le advertirá si una imagen seleccionada por este filtro no está realmente colgando.
Eliminar una imagen específica por ID
Puede usar el comando docker rmi
para eliminar cualquier imagen específica haciendo referencia a su ID:
$ docker rmi <image_id>
Eliminar una imagen específica por nombre y etiqueta
Puede eliminar una imagen específica junto con su nombre y etiqueta mediante el comando docker rmi
.
Por ejemplo, si tiene varias imágenes con el mismo nombre pero etiquetas diferentes, puede eliminar una en particular usando este formato:
$ docker rmi <image_name>:<tag>
Este método es útil cuando desea eliminar una versión específica de una imagen en lugar de eliminar todas las imágenes relacionadas con un repositorio.
Eliminar todas las imágenes con la última etiqueta
En Docker, la etiqueta "más reciente" se refiere a la versión más reciente de una imagen de Docker en particular. La etiqueta más reciente se usa a menudo como la etiqueta predeterminada para las imágenes de Docker. Se asigna automáticamente a la compilación más reciente de una imagen, a menos que se especifique explícitamente otra etiqueta.
Docker proporciona un comando para eliminar todas las imágenes con la etiqueta "más reciente":
$ docker rmi $(docker images | grep "latest" | awk '{print $3}')
El comando anterior se divide en 2 partes. Primero obtiene la lista de ID de imágenes y luego pasa esta lista como argumento al comando docker rmi
.
Eliminar imágenes de un repositorio remoto
Para eliminar una imagen de un repositorio remoto, como Docker Hub, primero deberá iniciar sesión en la cuenta mediante la CLI de Docker.
Una vez que haya iniciado sesión, solo necesita usar el comando docker rmi
para eliminar la imagen. El comando docker rmi
puede eliminar imágenes locales y remotas:
docker rmi my_repo/my_image_tag
En particular, solo puede eliminar imágenes que se hayan enviado al repositorio. Del mismo modo, no puede eliminar las imágenes utilizadas por los contenedores en ejecución.
Eliminar varias imágenes de un repositorio remoto
Para eliminar varias imágenes de un repositorio remoto, puede usar el comando docker rmi
seguido de los identificadores o etiquetas de las imágenes. Por ejemplo:
docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3
Esto eliminará las tres imágenes con las etiquetas image_tag_1
, image_tag_2
e image_tag_3
del repositorio my_repo
.
Cómo eliminar volúmenes de Docker
Los volúmenes de Docker pueden ocupar mucho espacio en disco, especialmente si contienen grandes cantidades de datos o varias copias de seguridad. Al eliminar los volúmenes que ya no se necesitan, reduce el riesgo de filtraciones de datos y garantiza que los usuarios no autorizados no puedan acceder a los datos confidenciales. La eliminación periódica de volúmenes también puede mantener actualizado el entorno de Docker y evitar problemas causados por datos obsoletos.
Estos comandos destruyen permanentemente todos los datos almacenados en un volumen, así que utilícelos con precaución.
Eliminar todos los volúmenes no utilizados
En Docker, eliminar volúmenes no utilizados es tan importante como eliminar imágenes o contenedores.
Para liberar almacenamiento en disco, puede usar el comando docker volume prune
.
Eliminar un volumen específico por nombre
Eliminar un volumen específico en Docker es útil para eliminar volúmenes no utilizados. Este es el comando para eliminar un volumen:
docker volume rm my_volume_name
Con el comando anterior, se eliminará el volumen my_volume_name . Docker produce un error si intenta eliminar un volumen usado. Puede comprobar los volúmenes disponibles con el comando docker volume ls
.
Cómo eliminar contenedores Docker
A medida que trabaje más con Docker, puede acumular muchos contenedores sin usar que ocupan los recursos del disco. Si no los elimina, pueden acumularse con el tiempo y consumir valiosos recursos del disco, ralentizando su sistema y poniéndolo potencialmente en riesgo.
Eliminar todos los contenedores detenidos
El comando docker container prune
puede eliminar todos los contenedores detenidos en Docker. Aquí, el comando crea una lista de todos los contenedores detenidos que se eliminarán y solicita confirmación antes de continuar. Esto ayuda a recuperar espacio en disco y a mantener un entorno de Docker limpio y organizado, al mismo tiempo que le permite verificar que no está perdiendo nada importante:
$ docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y Deleted Containers: 4df4c47c4df4 d35bcec20bce
Tenga en cuenta que solo los contenedores detenidos se pueden eliminar con este comando. Si necesita eliminar contenedores en ejecución, primero deberá detenerlos o usar un comando diferente.
Eliminar un contenedor específico por ID
En Docker, puede eliminar un contenedor específico por ID usando el docker rm command
junto con la ID del contenedor. Primero, obtenga toda la ID del contenedor usando el docker ps command
:
$ docker ps -a -q 1ce3cdeb4035 06b79541e25c fa98f1804e3e $ docker rm 1ce3cdeb4035
El comando anterior solo funciona si el contenedor está detenido. Si el contenedor se está ejecutando, debe eliminarlo a la fuerza con el indicador -f:
$ docker rm -f 1ce3cdeb4035
Eliminar un contenedor específico por nombre
Docker proporciona un comando docker rm
de propósito múltiple para eliminar ambos contenedores por nombre y por ID.
Por ejemplo, si tiene un contenedor llamado web_server , puede eliminarlo con el siguiente comando:
$ docker rm web_server
Primero, es importante detener el contenedor. Docker proporciona el comando docker stop
para detener un contenedor específico.
Eliminar todos los contenedores en ejecución
Para eliminar todos los contenedores en ejecución, puede usar el comando docker rm
:
$ docker rm $(docker ps -q)
El uso de docker ps -q
enumera los ID de los contenedores en ejecución. Después de eso, los ID se pasan al comando docker rm
, que elimina todos los contenedores.
Tenga en cuenta que este comando solo eliminará los contenedores en ejecución. Si desea eliminar todos los contenedores, incluidos los detenidos, puede usar el siguiente comando en su lugar:
$ docker rm $(docker ps -a -q)
Resumen
Este artículo explica cómo eliminar imágenes, volúmenes y contenedores de Docker. Aprendió varios métodos para mantener un sistema limpio y organizado. Cubría los comandos para eliminar todas las imágenes no utilizadas, sin etiquetar o específicas por ID o nombre. También aprendió comandos para eliminar todos los contenedores detenidos o un contenedor específico por ID o nombre.
La eliminación de imágenes, volúmenes y contenedores de Docker es un proceso sencillo que puede ayudarlo a administrar los componentes no utilizados, recuperar espacio valioso en el disco y, a menudo, mejorar el rendimiento del sistema.
Es esta simplicidad lo que atrae a los desarrolladores a Docker, y no existe una forma más sencilla de implementar una aplicación desarrollada en Docker que con la plataforma de alojamiento de aplicaciones de Kinsta. Puedes probarlo gratis ahora.