Docker es una tecnología de contenedorización de software que ayuda a los desarrolladores a crear y desplegar aplicaciones en plataformas dispares que van desde el escritorio a la nube.

Una instantánea — o blueprint — 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 Docker que requieren datos persistentes pueden confiar en el almacenamiento llamado volúmenes 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 instancias no utilizadas de estos activos pueden acumularse, ocupando un valioso espacio en disco y acabando por afectar al rendimiento del sistema.

Este artículo explora diferentes formas de mantener la organización del sistema mediante el borrado de imágenes (tanto individualmente como todas a la vez), volúmenes y contenedores. Y utilizaremos la interfaz de línea de comandos (CLI) de  docker para realizar estas tareas rápidamente.

Cómo Eliminar Imágenes Docker

Eliminar imágenes obsoletas o innecesarias de Docker es esencial para mantener un sistema limpio y organizado. Veamos cómo la CLI puede eliminar determinadas imágenes.

En primer lugar, veamos las imágenes de 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

El listado de imágenes anterior ha revelado imágenes llamadas my_image y demo, ambas etiquetadas como latest. Una tercera imagen no tiene nombre ni etiqueta. En este caso, es una imagen «dangling»: una que actualmente no está siendo utilizada por un contenedor. Esta imagen dangling es el resultado 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.

El listado también muestra los 12 primeros 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 del listado anterior, tenemos una imagen colgada. Sin embargo, es posible que una imagen sin nombre ni 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 están realmente colgadas, puedes utilizar 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 depuración, la imagen sin nombre ni etiqueta ha desaparecido.

Eliminar una Imagen Específica por Su Nombre

Puedes seleccionar una imagen para eliminarla haciendo referencia a su nombre:

$ docker image rm <image_name>

Nota: No puedes eliminar fácilmente las imágenes que aún están en uso. Debes detener o eliminar los contenedores en ejecución que estén utilizando las imágenes. Aunque normalmente no se recomienda, puedes forzar la eliminación de una imagen activa utilizando el indicador -f:

$ docker image rm <image_name> -f

Uso de la Abreviatura rmi para Eliminar Imágenes

La CLI de Docker tiene un método abreviado para eliminar imágenes en el alias rmi. Utilizarlo para eliminar una imagen por su nombre tiene el siguiente aspecto:

$ docker rmi demo
Untagged: demo:latest
Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4

Utilizaremos 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 disco, lo que ralentiza tu sistema cada vez más con el tiempo.

Para eliminar todas las imágenes no etiquetadas en Docker, utiliza el comando docker rmi con un filtro. Puedes proporcionar filtros basados en criterios específicos utilizando la opción -f (no confundir con la bandera -f disponible para image rm para forzar una acción).

El filtro dangling=true se utiliza para identificar imágenes no etiquetadas:

$ docker rmi $(docker images -f "dangling=true" -q)

La opción -q del comando anterior muestra los ID de imagen de todas las imágenes no etiquetadas. Todos estos ID se pasan como argumentos a docker rmi para eliminarlos.

Este filtro utiliza la palabra clave «dangling», pero como se ha indicado anteriormente, algunas imágenes sin etiquetas pueden estar realmente activas. Se te avisará si una imagen seleccionada por este filtro no es realmente dangling.

Eliminar una Imagen Específica por ID

Puedes utilizar 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

Puedes eliminar una imagen específica junto con su nombre y etiqueta utilizando el comando docker rmi.

Por ejemplo, si tienes varias imágenes con el mismo nombre pero diferentes etiquetas, puedes eliminar una en concreto utilizando este formato:

$ docker rmi <image_name>:<tag>

Este método es útil cuando quieres borrar una versión específica de una imagen en lugar de borrar todas las imágenes relacionadas con un repositorio.

Eliminar Todas las Imágenes con la Última Etiqueta

En Docker, la etiqueta «latest» se refiere a la versión más reciente de una imagen Docker concreta. La etiqueta «latest» se utiliza a menudo como etiqueta por defecto para las imágenes Docker. Se asigna automáticamente a la construcció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 «latest»:

$ docker rmi $(docker images | grep "latest" | awk '{print $3}')

El comando anterior se divide en 2 partes. Primero obtiene la lista de IDs 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 tendrás que acceder a la cuenta utilizando la CLI de Docker.

Una vez que hayas iniciado sesión, sólo tienes que utilizar el comando docker rmi para eliminar la imagen. El comando docker rmi puede eliminar tanto imágenes locales como remotas:

docker rmi my_repo/my_image_tag

En concreto, sólo puedes eliminar imágenes que hayan sido enviadas al repositorio. Del mismo modo, no puedes eliminar imágenes utilizadas por contenedores en ejecución.

Eliminar Varias Imágenes de un Repositorio Remoto

Para eliminar varias imágenes de un repositorio remoto, puedes utilizar el comando docker rmi seguido de los ID 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, y image_tag_3 del repositorio my_repo.

Cómo Eliminar Volúmenes Docker

Los volúmenes Docker pueden ocupar mucho espacio en disco, especialmente si contienen grandes cantidades de datos o múltiples copias de seguridad. Al eliminar los volúmenes que ya no son necesarios, reduces el riesgo de filtración de datos y te aseguras de que los usuarios no autorizados no puedan acceder a datos confidenciales. Eliminar volúmenes con regularidad también puede mantener actualizado el entorno Docker y evitar problemas causados por datos obsoletos.

Estos comandos destruyen permanentemente todos los datos almacenados en un volumen, así que utilízalos con precaución.

Eliminar Todos los Volúmenes No Utilizados

En Docker, eliminar volúmenes no utilizados es tan crítico como eliminar imágenes o contenedores.

Para liberar almacenamiento en disco, puedes utilizar 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 intentas eliminar un volumen usado. Puedes comprobar los volúmenes disponibles utilizando el comando docker volume ls.

Cómo Eliminar Contenedores Docker

A medida que trabajes más con Docker, es posible que acumules muchos contenedores sin usar que ocupan los recursos del disco. Si no los eliminas, pueden acumularse con el tiempo y ocupar valiosos recursos del disco, ralentizando tu sistema y poniéndote potencialmente en peligro.

Eliminar Todos los Contenedores Parados

El comando docker container prune puede eliminar todos los contenedores detenidos en Docker. Aquí, el comando crea una lista de todos los contenedores parados que serán eliminados y pide confirmación antes de proceder. Esto ayuda a recuperar espacio en disco y a mantener un entorno Docker limpio y organizado, a la vez que te permite comprobar que no estás 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

Ten en cuenta que con este comando sólo se pueden eliminar los contenedores parados. Si necesitas eliminar contenedores en ejecución, tendrás que detenerlos primero o utilizar un comando diferente.

Eliminar un Contenedor Específico por ID

En Docker, puedes eliminar un contenedor específico por ID utilizando docker rm command junto con el ID del contenedor. Primero, obtén todos los ID de contenedor utilizando el comando docker ps command:

$ docker ps -a -q
1ce3cdeb4035
06b79541e25c
fa98f1804e3e

$ docker rm 1ce3cdeb4035

El comando anterior sólo funciona si el contenedor está en estado detenido. Si el contenedor está en ejecución, tendrás que eliminarlo a la fuerza utilizando la bandera -f:

$ docker rm -f 1ce3cdeb4035

Eliminar un Contenedor Específico por su Nombre

Docker proporciona un comando docker rm polivalente para eliminar tanto contenedores por nombre como por ID.

Por ejemplo, si tienes un contenedor llamado web_server, puedes eliminarlo utilizando el siguiente comando:

$ docker rm web_server

En primer lugar, es importante detener el contenedor. Docker proporciona el comando docker stop para detener un contenedor concreto.

Eliminar Todos los Contenedores en Ejecución

Para eliminar todos los contenedores en ejecución, puedes utilizar el comando docker rm:

$ docker rm $(docker ps -q)

Utilizando docker ps -q se enumeran los ID de los contenedores en ejecución. Después, los ID se pasan al comando docker rm, que elimina todos los contenedores.

Ten en cuenta que este comando sólo eliminará los contenedores en ejecución. Si quieres eliminar todos los contenedores, incluidos los parados, puedes utilizar en su lugar el siguiente comando:

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

Resumen

Este artículo explica cómo eliminar imágenes, volúmenes y contenedores Docker. Has aprendido varios métodos para mantener un sistema limpio y organizado. Se han tratado los comandos para eliminar todas las imágenes no utilizadas, no etiquetadas o específicas por ID o nombre. También aprendiste comandos para eliminar todos los contenedores detenidos o un contenedor específico por ID o nombre.

Eliminar imágenes, volúmenes y contenedores Docker es un proceso sencillo que puede ayudarte a gestionar los componentes no utilizados, recuperando un valioso espacio en disco y, a menudo, mejorando el rendimiento del sistema.

Es esta simplicidad la que atrae a los desarrolladores a Docker, y no hay forma más sencilla de desplegar una aplicación desarrollada en Docker que con la plataforma de Alojamiento de Aplicaciones de Kinsta. Puedes probarla gratis ahora.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.