Cómo usar el comando docker image rm para eliminar imágenes

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo gestionar eficazmente las imágenes de Docker utilizando el comando docker image rm. Comenzaremos enumerando las imágenes existentes en su sistema para entender qué imágenes tiene.

A continuación, exploraremos diferentes escenarios para eliminar imágenes, incluyendo intentar eliminar una imagen con múltiples etiquetas (tags), eliminar una imagen por su etiqueta (tag), eliminar una imagen por su ID utilizando la opción de fuerza, y finalmente, eliminar una imagen por su resumen (digest). Esta experiencia práctica le proporcionará las habilidades necesarias para limpiar las imágenes de Docker no utilizadas o no deseadas.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ImageOperationsGroup -.-> docker/rmi("Remove Image") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/rmi -.-> lab-555161{{"Cómo usar el comando docker image rm para eliminar imágenes"}} docker/images -.-> lab-555161{{"Cómo usar el comando docker image rm para eliminar imágenes"}} end

Listar imágenes existentes

En este paso, aprenderemos cómo listar las imágenes de Docker que están actualmente disponibles en su sistema. Las imágenes de Docker son los bloques de construcción de los contenedores. Son plantillas de solo lectura utilizadas para crear contenedores.

Para listar las imágenes, puede utilizar el comando docker images. Este comando muestra una lista de todas las imágenes que Docker ha descargado o creado en su máquina.

Intentémoslo. Abra su terminal y ejecute el siguiente comando:

docker images

Debería ver una salida similar a esta (las imágenes y detalles exactos pueden variar dependiendo de lo que haya hecho previamente con Docker):

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   latest    d00000000000   2 months ago   13.3kB

La salida proporciona varias piezas de información sobre cada imagen:

  • REPOSITORY: El nombre de la imagen.
  • TAG: Una versión específica de la imagen. latest es la etiqueta (tag) predeterminada si no se especifica ninguna.
  • IMAGE ID: El identificador único de la imagen.
  • CREATED: Hace cuánto tiempo se creó la imagen.
  • SIZE: El tamaño de la imagen.

Comprender las imágenes que tiene es el primer paso para administrarlas. En los siguientes pasos, exploraremos cómo eliminar imágenes.

Intentar eliminar una imagen con múltiples etiquetas (tags)

En este paso, exploraremos qué sucede cuando intentas eliminar una imagen de Docker que tiene múltiples etiquetas (tags) que apuntan al mismo ID de imagen. Este es un escenario común cuando etiquetas (tag) una imagen con diferentes versiones o nombres.

Primero, vamos a descargar una imagen y etiquetarla con una etiqueta adicional. Usaremos la imagen hello-world para este ejemplo. Si ya la tiene, la descarga será muy rápida.

docker pull hello-world

Ahora, agreguemos otra etiqueta a esta imagen utilizando el comando docker tag. La sintaxis es docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]. Etiquetaremos la imagen hello-world:latest con una nueva etiqueta llamada hello-world:mytag.

docker tag hello-world:latest hello-world:mytag

Ahora, listemos las imágenes nuevamente para ver la nueva etiqueta.

docker images

Debería ver dos entradas para hello-world, una con la etiqueta latest y otra con la etiqueta mytag, pero ambas tendrán el mismo IMAGE ID.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   latest    d00000000000   2 months ago   13.3kB
hello-world   mytag     d00000000000   2 months ago   13.3kB

Ahora, intentemos eliminar la imagen utilizando una de las etiquetas, por ejemplo, hello-world:latest, utilizando el comando docker rmi.

docker rmi hello-world:latest

Notará que Docker en realidad no elimina los datos de la imagen en sí. En cambio, elimina la etiqueta específica que ha especificado. La salida indicará que se ha "Quitado la etiqueta (Untagged)".

Untagged: hello-world:latest

Si lista las imágenes nuevamente, verá que la entrada hello-world:latest ha desaparecido, pero la entrada hello-world:mytag (con el mismo IMAGE ID) todavía existe.

docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   mytag     d00000000000   2 months ago   13.3kB

Esto demuestra que cuando una imagen tiene múltiples etiquetas (tags), eliminar una sola etiqueta solo elimina esa referencia específica a los datos de la imagen. Los datos de la imagen en sí solo se eliminan cuando se elimina la última etiqueta que apunta a ella, o cuando la elimina explícitamente por su ID (lo cual cubriremos más adelante).

Eliminar una imagen por etiqueta (tag)

En el paso anterior, vimos que eliminar una etiqueta (tag) solo quita la etiqueta de la imagen si otras etiquetas o contenedores todavía la están referenciando. En este paso, eliminaremos la última etiqueta restante de la imagen hello-world, lo que debería resultar en la eliminación de los datos de la imagen.

Actualmente tenemos la imagen hello-world con la etiqueta mytag. Confirmemos esto listando las imágenes:

docker images

Debería ver la entrada hello-world:mytag.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   mytag     d00000000000   2 months ago   13.3kB

Ahora, eliminemos la imagen hello-world utilizando la etiqueta mytag con el comando docker rmi:

docker rmi hello-world:mytag

Esta vez, dado que mytag era la única etiqueta que referenciaba este ID de imagen, Docker eliminará tanto la etiqueta como los datos subyacentes de la imagen. La salida mostrará que se ha "Quitado la etiqueta (Untagged)" y luego "Eliminado (Deleted)".

Untagged: hello-world:mytag
Deleted: sha256:d000000000000000000000000000000000000000000000000000000000000000
Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
... (más líneas de Deleted)

Listemos las imágenes nuevamente para confirmar que la imagen hello-world ha desaparecido:

docker images

La imagen hello-world ya no debería aparecer en la lista.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB

Esto demuestra la forma estándar de eliminar una imagen cuando no está siendo utilizada por ningún contenedor y solo tiene una etiqueta (tag).

Eliminar una imagen por ID utilizando la opción forzada

En este paso, aprenderemos cómo eliminar una imagen de Docker utilizando su ID de imagen y, específicamente, cómo utilizar la opción forzada (-f o --force) cuando sea necesario. Eliminar por ID es útil cuando quieres ser preciso sobre qué imagen estás eliminando, especialmente si múltiples etiquetas (tags) apuntan a la misma imagen.

Primero, descarguemos una imagen que luego podamos eliminar por ID. Utilizaremos la imagen ubuntu. Si ya la tienes, la descarga será rápida.

docker pull ubuntu

Ahora, listemos las imágenes para obtener el ID de imagen de la imagen ubuntu.

docker images

Encuentra la imagen ubuntu en la salida y anota su IMAGE ID. Será una larga cadena de caracteres hexadecimales. Solo necesitas los primeros caracteres (generalmente 3 o más) para identificar de forma única la imagen.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB

Intentemos eliminar la imagen utilizando su ID sin la opción forzada primero. Reemplaza YOUR_IMAGE_ID con el ID de imagen real que anotaste de la salida de docker images.

docker rmi YOUR_IMAGE_ID

Si la imagen no está siendo utilizada por ningún contenedor en ejecución o detenido, este comando probablemente tendrá éxito y eliminará la imagen. Sin embargo, si hay un contenedor basado en esta imagen, recibirás un mensaje de error que indica que la imagen está siendo utilizada por un contenedor y no se puede eliminar.

Para demostrar el uso de la opción forzada, primero ejecutemos un contenedor basado en la imagen ubuntu.

docker run -d ubuntu sleep 3600

Este comando ejecuta un contenedor Ubuntu en modo desatendido (-d) y lo mantiene en ejecución durante una hora (sleep 3600).

Ahora, intenta eliminar la imagen ubuntu por su ID nuevamente sin la opción forzada.

docker rmi YOUR_IMAGE_ID

Deberías recibir un mensaje de error similar a este:

Error response from daemon: conflict: unable to remove repository reference "ubuntu:latest" (must force) - image is referenced by one or more containers: 000000000000 (created ...)

Este error se produce porque un contenedor está utilizando la imagen. Para eliminar una imagen que está siendo utilizada por un contenedor, debes utilizar la opción forzada (-f).

Ahora, eliminemos la imagen utilizando su ID con la opción forzada. Reemplaza YOUR_IMAGE_ID con el ID de imagen real.

docker rmi -f YOUR_IMAGE_ID

La opción forzada le dice a Docker que elimine la imagen incluso si está siendo utilizada por un contenedor. Docker detendrá y eliminará primero cualquier contenedor que esté utilizando la imagen y luego eliminará la imagen en sí. La salida mostrará que la imagen y sus capas se han eliminado.

Untagged: ubuntu:latest
Deleted: sha256:2700000000000000000000000000000000000000000000000000000000000000
Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
... (más líneas de Deleted)

Listemos las imágenes nuevamente para confirmar que la imagen ubuntu ha desaparecido.

docker images

La imagen ubuntu ya no debería estar en la lista.

Debes utilizar la opción forzada con cautela, ya que detendrá y eliminará contenedores sin confirmación adicional.

Eliminar una imagen por su digest

En este último paso, aprenderemos cómo eliminar una imagen de Docker utilizando su digest. Un digest de imagen es un identificador criptográficamente seguro para el contenido de la imagen. Identifica de forma única las capas y la configuración exactas de una imagen, independientemente de sus etiquetas (tags).

Primero, descarguemos una imagen que podamos eliminar por su digest. Utilizaremos la imagen alpine para este ejemplo.

docker pull alpine

Ahora, para ver el digest de la imagen, puedes utilizar el comando docker images --digests.

docker images --digests

Busca la imagen alpine en la salida. Verás una columna DIGEST con un valor que comienza con sha256:. Este es el digest de la imagen.

REPOSITORY    TAG       DIGEST                                                                    IMAGE ID       CREATED        SIZE
ubuntu        latest    <none>                                                                    270000000000   2 weeks ago    77.8MB
alpine        latest    sha256:0000000000000000000000000000000000000000000000000000000000000000   000000000000   3 weeks ago    5.59MB

Para eliminar la imagen por su digest, utiliza el comando docker rmi seguido del nombre de la imagen y el digest en el formato REPOSITORY@DIGEST. Reemplaza YOUR_ALPINE_DIGEST con el digest real que encontraste en la salida anterior.

docker rmi alpine@YOUR_ALPINE_DIGEST

La salida mostrará que la imagen se ha eliminado.

Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
... (más líneas de Deleted)

Lista las imágenes nuevamente para confirmar que la imagen alpine ha desaparecido.

docker images

La imagen alpine ya no debería estar en la lista.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    <none>                                                                    270000000000   2 weeks ago    77.8MB

Eliminar por digest es la forma más específica de eliminar una imagen, asegurándote de eliminar la versión exacta de la imagen identificada por ese digest.

Resumen

En este laboratorio, aprendimos cómo gestionar imágenes de Docker utilizando los comandos docker images y docker rmi. Comenzamos listando las imágenes existentes para entender su repositorio, etiqueta (tag), ID, tiempo de creación y tamaño.

Luego exploramos el proceso de eliminación de imágenes. Intentamos eliminar una imagen con múltiples etiquetas y observamos que docker rmi solo elimina la etiqueta especificada, no el ID de la imagen subyacente, si otras etiquetas todavía la referencian. Eliminamos con éxito una imagen especificando su etiqueta y también demostramos cómo eliminar una imagen por su ID, incluyendo el uso de la opción forzada (-f) cuando era necesario. Finalmente, aprendimos cómo eliminar una imagen utilizando su digest, que proporciona un identificador único e inmutable para el contenido de la imagen.