Ya sabemos crear contenedores. Probablemente, si has seguido los artículos anteriores, hayas lanzado unos cuantos hello-world, algún nginx y quizás un ubuntu.
Y ahora te preguntas: ¿Dónde están? ¿Siguen corriendo? ¿Cómo me deshago de ellos?
Docker no borra nada a menos que tú se lo digas. Un contenedor que ha terminado su tarea no desaparece; se queda en estado “Detenido” (Exited), ocupando espacio en disco y reservando su nombre.
En este artículo vamos a aprender a gestionar el caos y mantener nuestro entorno limpio.
| Comando | Acción |
|---|---|
docker ps | Lista contenedores encendidos. |
docker ps -a | Lista TODOS (encendidos y parados). |
docker stop <id> | Apaga un contenedor amablemente. |
docker rm <id> | Elimina un contenedor parado (borra datos). |
docker run --rm | Crea un contenedor que se borra solo al terminar. |
docker container prune | Borra todos los contenedores parados del sistema. |
Listar contenedores (docker ps)
El comando para ver qué está pasando es docker ps (Process Status).
Si ejecutas simplemente:
docker ps
Verás solo los contenedores que están encendidos (Running) en este momento.
CONTAINER ID IMAGE STATUS PORTS NAMES
a1b2c3d4e5 nginx Up 5 minutes 0.0.0.0:80->80/tcp mi-web
Para ver todos los contenedores, encendidos o no, usamos el flag -a (All):
docker ps -a
Ahora verás una lista mucho más larga:
CONTAINER ID IMAGE STATUS NAMES
a1b2c3d4e5 nginx Up 5 minutes mi-web
f9e8d7c6b5 hello-world Exited (0) 2 hours ago nervous_bhabha
¿Ves ese Exited? Es un contenedor parado. Ocupa poco, pero su capa de escritura sigue en tu disco duro.
Parar contenedores (stop vs kill)
Para detener un contenedor que está corriendo, tenemos dos formas: la “amable” y la “bruta”.
La forma correcta: docker stop
docker stop mi-web
Esto envía una señal SIGTERM al proceso principal. Le dice a la aplicación: “Por favor, termina lo que estés haciendo, guarda los datos y ciérrate”. Docker le da 10 segundos de cortesía. Si no se cierra, lo mata.
La forma bruta: docker kill
docker kill mi-web
Esto envía un SIGKILL. Es como tirar del cable de la corriente. El proceso muere instantáneamente sin guardar nada.
Úsalo solo si el contenedor se ha quedado colgado y no responde al stop.
Borrar contenedores docker rm
Una vez que un contenedor está parado (Exited), sigue existiendo. Para eliminarlo definitivamente y liberar el espacio de su capa de escritura, usamos rm:
docker rm mi-web
Si intentas borrar un contenedor que está encendido (Up), Docker te dará un error:
Error response from daemon: You cannot remove a running container…
Primero debes hacer stop, y luego rm. O usar el flag de fuerza bruta docker rm -f mi-web (no recomendado habitualmente).
Limpieza general (prune)
Si ya es tarde y tienes 50 contenedores parados que te da pereza borrar uno a uno, Docker tiene el comando escoba:
docker container prune
Esto borrará de golpe todos los contenedores que estén en estado Exited. Te pedirá confirmación, responderá con el espacio liberado y te quedarás con una sensación de paz interior maravillosa (o no, si te has cargado algo que no querías 😉).
