Cómo usar el comando docker container rm para eliminar contenedores

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ás a gestionar eficazmente contenedores de Docker utilizando el comando docker container rm. Practicarás la creación y eliminación de un contenedor básico, comprenderás cómo forzar la eliminación de un contenedor en ejecución, explorarás la opción de eliminar un contenedor junto con sus volúmenes anónimos asociados y, finalmente, aprenderás a eliminar de manera eficiente todos los contenedores detenidos.

A través de ejercicios prácticos, adquirirás experiencia en la gestión esencial del ciclo de vida de contenedores Docker, lo que te permitirá limpiar tu entorno de Docker y administrar los recursos de forma efectiva.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") subgraph Lab Skills docker/run -.-> lab-555120{{"Cómo usar el comando docker container rm para eliminar contenedores"}} docker/ls -.-> lab-555120{{"Cómo usar el comando docker container rm para eliminar contenedores"}} docker/ps -.-> lab-555120{{"Cómo usar el comando docker container rm para eliminar contenedores"}} docker/rm -.-> lab-555120{{"Cómo usar el comando docker container rm para eliminar contenedores"}} docker/pull -.-> lab-555120{{"Cómo usar el comando docker container rm para eliminar contenedores"}} docker/volume -.-> lab-555120{{"Cómo usar el comando docker container rm para eliminar contenedores"}} docker/prune -.-> lab-555120{{"Cómo usar el comando docker container rm para eliminar contenedores"}} end

Crear y eliminar un contenedor

En este paso, aprenderás cómo crear y eliminar un contenedor de Docker. Un contenedor es una instancia ejecutable de una imagen. Puedes crear, iniciar, detener, mover o eliminar un contenedor utilizando la API de Docker o la CLI.

Primero, descarguemos una imagen simple que podamos usar para crear un contenedor. Utilizaremos la imagen hello-world, que es una imagen muy pequeña que simplemente imprime "¡Hola desde Docker!" y finaliza.

docker pull hello-world

Deberías ver una salida que indica que la imagen se está descargando.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Ahora que tenemos la imagen, podemos crear y ejecutar un contenedor a partir de ella. Usaremos el comando docker run.

docker run hello-world

Este comando creará un nuevo contenedor a partir de la imagen hello-world, ejecutará el comando especificado en la imagen (que es imprimir "¡Hola desde Docker!") y luego el contenedor finalizará. Deberías ver el mensaje "¡Hola desde Docker!" en tu terminal.

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Después de que el contenedor haya terminado de ejecutarse, se detendrá. Puedes ver todos los contenedores, incluidos los detenidos, usando el comando docker ps -a.

docker ps -a

Deberías ver una salida similar a esta, mostrando el contenedor hello-world con un estado de "Exited".

CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
<container_id>   hello-world   "/hello"   About a minute ago   Exited (0) About a minute ago             <container_name>

Ahora, eliminemos el contenedor detenido. Podemos usar el comando docker rm seguido del ID o nombre del contenedor. Puedes obtener el ID o nombre del contenedor de la salida de docker ps -a. Reemplaza <container_id> con el ID real de tu contenedor.

docker rm <container_id>

Deberías ver el ID del contenedor impreso, lo que indica que el contenedor ha sido eliminado.

<container_id>

Para verificar que el contenedor ha sido eliminado, puedes ejecutar docker ps -a nuevamente. El contenedor hello-world ya no debería aparecer en la lista.

docker ps -a

La salida no debería contener el contenedor hello-world que acabas de eliminar.

Eliminar forzosamente un contenedor en ejecución

En el paso anterior, eliminamos un contenedor detenido. Sin embargo, no puedes eliminar directamente un contenedor en ejecución usando docker rm. En este paso, aprenderás cómo eliminar forzosamente un contenedor en ejecución.

Primero, creemos un contenedor que permanezca en ejecución. Usaremos la imagen ubuntu y ejecutaremos un comando que mantenga el contenedor activo, como sleep infinity. Si no tienes la imagen ubuntu, descárgala primero.

docker pull ubuntu

Ahora, ejecuta un contenedor a partir de la imagen ubuntu en modo desatendido (-d) para que se ejecute en segundo plano.

docker run -d ubuntu sleep infinity

Deberías ver una cadena larga que corresponde al ID del contenedor.

<container_id>

Verifiquemos que el contenedor está en ejecución usando docker ps.

docker ps

Deberías ver el contenedor ubuntu listado con un estado de "Up".

CONTAINER ID   IMAGE    COMMAND         CREATED          STATUS          PORTS     NAMES
<container_id>   ubuntu   "sleep infinity"   About a minute ago   Up About a minute ago             <container_name>

Ahora, intenta eliminar este contenedor en ejecución usando el comando docker rm con el ID del contenedor. Reemplaza <container_id> con el ID real de tu contenedor en ejecución.

docker rm <container_id>

Probablemente verás un mensaje de error indicando que no puedes eliminar un contenedor en ejecución.

Error response from daemon: You cannot remove a running container <container_id>. Stop the container before attempting removal or use -f

Como sugiere el mensaje de error, necesitas detener el contenedor primero o usar la bandera -f (force). Detener un contenedor puede tomar tiempo, especialmente si el proceso dentro del contenedor no responde rápidamente a la señal de detención. La eliminación forzosa es una forma más rápida de eliminar un contenedor en ejecución, aunque generalmente se recomienda detener los contenedores correctamente cuando sea posible.

Eliminemos forzosamente el contenedor en ejecución usando la bandera -f. Reemplaza <container_id> con el ID real de tu contenedor en ejecución.

docker rm -f <container_id>

Deberías ver el ID del contenedor impreso, indicando que el contenedor ha sido eliminado forzosamente.

<container_id>

Para verificar que el contenedor ha sido eliminado, ejecuta docker ps nuevamente. El contenedor ubuntu no debería aparecer en la lista.

docker ps

La salida no debería contener el contenedor ubuntu que acabas de eliminar.

Eliminar un contenedor y sus volúmenes anónimos

En este paso, aprenderás cómo eliminar un contenedor y sus volúmenes anónimos asociados. Cuando creas un contenedor, Docker puede crear volúmenes para almacenar datos. Los volúmenes anónimos son aquellos que no tienen un nombre explícito al crearse. Normalmente se crean cuando hay una instrucción VOLUME en el Dockerfile de la imagen.

Ejecutemos un contenedor que cree un volumen anónimo. Usaremos nuevamente la imagen ubuntu y especificaremos un punto de montaje de volumen usando la bandera -v sin nombre antes de los dos puntos.

docker run -d -v /data ubuntu sleep infinity

Este comando crea un contenedor y un volumen anónimo montado en /data dentro del contenedor. Deberías ver el ID del contenedor impreso.

<container_id>

Ahora, inspeccionemos el contenedor para ver el volumen creado. Reemplaza <container_id> con el ID real de tu contenedor en ejecución.

docker inspect <container_id>

La salida de docker inspect es un objeto JSON extenso. Busca la sección "Mounts". Deberías ver una entrada para el volumen montado en /data, donde el campo "Name" será una cadena larga generada aleatoriamente, indicando que es un volumen anónimo.

...
"Mounts": [
    {
        "Type": "volume",
        "Source": "<volume_name>",
        "Target": "/data",
        "Consistency": "consistent",
        "BindOptions": null,
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
],
...

También puedes listar todos los volúmenes usando docker volume ls. Deberías ver el volumen anónimo listado.

docker volume ls

La salida incluirá el volumen anónimo con su nombre generado aleatoriamente.

DRIVER    VOLUME NAME
local     <volume_name>

Por defecto, cuando eliminas un contenedor, sus volúmenes anónimos no se eliminan. Primero detengamos el contenedor. Reemplaza <container_id> con el ID real de tu contenedor en ejecución.

docker stop <container_id>

Deberías ver el ID del contenedor impreso.

<container_id>

Ahora, elimina el contenedor detenido sin eliminar sus volúmenes. Reemplaza <container_id> con el ID real de tu contenedor detenido.

docker rm <container_id>

Deberías ver el ID del contenedor impreso.

<container_id>

Verifica los volúmenes nuevamente con docker volume ls. El volumen anónimo debería seguir presente.

docker volume ls

La salida seguirá incluyendo el volumen anónimo.

Ahora, creemos otro contenedor con un volumen anónimo y luego eliminemos el contenedor junto con su volumen.

docker run -d -v /data ubuntu sleep infinity

Obtén el ID del nuevo contenedor.

<new_container_id>

Detén el nuevo contenedor. Reemplaza <new_container_id> con el ID real.

docker stop <new_container_id>

Deberías ver el ID del contenedor impreso.

<new_container_id>

Ahora, elimina el contenedor detenido y sus volúmenes anónimos usando la bandera -v con docker rm. Reemplaza <new_container_id> con el ID real.

docker rm -v <new_container_id>

Deberías ver el ID del contenedor impreso.

<new_container_id>

Verifica los volúmenes nuevamente con docker volume ls. El volumen anónimo asociado al contenedor que acabas de eliminar ya no debería aparecer. El primer volumen anónimo que creaste debería seguir presente.

docker volume ls

La salida solo debería mostrar el primer volumen anónimo que creaste.

Eliminar todos los contenedores detenidos

En este paso, aprenderás cómo eliminar todos los contenedores detenidos de una vez. Mientras trabajas con Docker, puedes acumular muchos contenedores detenidos que ocupan espacio en disco. Docker proporciona un comando conveniente para limpiar estos contenedores detenidos.

Primero, creemos algunos contenedores detenidos. Podemos usar la imagen ubuntu y ejecutar un comando que finalice inmediatamente.

docker run ubuntu echo "This container will stop immediately"

Deberías ver la salida "This container will stop immediately" y el contenedor se detendrá.

Ejecuta el comando nuevamente para crear otro contenedor detenido.

docker run ubuntu echo "Another stopped container"

Deberías ver la salida "Another stopped container" y este contenedor también se detendrá.

Ahora, listemos todos los contenedores, incluyendo los detenidos, usando docker ps -a.

docker ps -a

Deberías ver los dos contenedores que acabas de crear listados con un estado de "Exited". También podrías ver otros contenedores detenidos de pasos anteriores si no los eliminaste.

CONTAINER ID   IMAGE    COMMAND                  CREATED          STATUS                      PORTS     NAMES
<container_id_1>   ubuntu   "echo 'This containe…"   About a minute ago   Exited (0) About a minute ago             <container_name_1>
<container_id_2>   ubuntu   "echo 'Another stopp…"   About a minute ago   Exited (0) About a minute ago             <container_name_2>
...

Para eliminar todos los contenedores detenidos, puedes usar el comando docker container prune. Este comando eliminará todos los contenedores detenidos.

docker container prune

Docker pedirá confirmación antes de eliminar los contenedores. Escribe y y presiona Enter.

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

Deberías ver una lista de los IDs de los contenedores eliminados.

Deleted Containers:
<container_id_1>
<container_id_2>
...

Total reclaimed space: ...

Para verificar que todos los contenedores detenidos han sido eliminados, ejecuta docker ps -a nuevamente.

docker ps -a

La salida solo debería mostrar contenedores en ejecución (si hay alguno) y ningún contenedor detenido.

Resumen

En este laboratorio, aprendiste el proceso fundamental para gestionar contenedores Docker utilizando el comando docker rm. Comenzaste creando y ejecutando un contenedor simple de hello-world, observando su ciclo de vida desde la creación hasta su finalización. Luego practicaste la eliminación de este contenedor detenido usando su ID o nombre.

Profundizando en este conocimiento, exploraste escenarios de eliminación más avanzados. Aprendiste cómo eliminar forzosamente un contenedor en ejecución usando la bandera -f, comprendiendo las implicaciones de esta acción. Además, descubriste cómo eliminar un contenedor junto con sus volúmenes anónimos asociados mediante la bandera -v, asegurando una eliminación limpia. Finalmente, dominaste la técnica eficiente de eliminar todos los contenedores detenidos simultáneamente, un comando útil para limpiar tu entorno Docker.