13. Borrar contenedores e imágenes
docker --version
Borrar Contenedores e Imágenes en Docker
🧹 Introducción a la limpieza en Docker
Imagina que Docker es como un taller de carpintería:
Imágenes = Planos de muebles (instrucciones para construir)
Contenedores = Muebles ya construidos (instancias en ejecución o terminadas)
Limpiar = Deshacerse de los muebles terminados y planos que ya no necesitas
📊 Visualización del estado actual
Listar contenedores activos:
docker psEsto muestra solo los contenedores en ejecución.
Listar TODOS los contenedores (activos y detenidos):
docker ps -aRepresentación ASCII del estado:
┌───────────────────────────────────┐
│ ESTADO DE CONTENEDORES │
├─────┬───────--─┬─────┬─────────────┤
│ ID │ Nombre │ Estado │ Puerto │
├─────────────┼──────────────┼────────┼─────────────┤
│ a1b2c3d4 │ web-server │ Up │ 8080:80 │ ← Activo
│ e5f6g7h8 │ db-mysql │ Exited │ - │ ← Detenido
│ i9j0k1l2 │ api-node │ Exited │ - │ ← Detenido
│ m3n4o5p6 │ redis-cache │ Exited │ - │ ← Detenido
└─────────────┴──────────────┴──────────┴─────────────┘🗑️ Borrar contenedores individualmente
Método 1: Usando el ID del contenedor
docker rm a1b2c3d4Método 2: Usando el nombre del contenedor
docker rm web-serverMétodo 3: Usando solo los primeros caracteres del ID
docker rm a1b(Siempre que los primeros caracteres sean únicos)
🧽 Borrar múltiples contenedores a la vez
Opción A: Listar varios IDs separados por espacio
docker rm a1b2c3d4 e5f6g7h8 i9j0k1l2Opción B: Borrar TODOS los contenedores detenidos
docker container prune⚠️ ADVERTENCIA: Esto eliminará todos los contenedores detenidos
¿Estás seguro? [y/N] yDiagrama del proceso:
ANTES: [Contenedor1] [Contenedor2] [Contenedor3] [Contenedor4]
(Activo) (Detenido) (Detenido) (Detenido)
┌─────────────────────────────────────────────────────────┐
│ docker container prune │
└─────────────────────────────────────────────────────────┘
↓
DESPUÉS: [Contenedor1] (solo queda el activo)
(Activo)🖼️ Gestión de imágenes Docker
Listar todas las imágenes disponibles:
docker imagesRepresentación de imágenes:
┌─────────────────────────────────────────────────────────────┐
│ IMÁGENES DISPONIBLES │
├─────────────────┬────────────┬──────────┬───────────────────┤
│ REPOSITORIO │ TAG │ ID │ TAMAÑO │
├─────────────────┼────────────┼──────────┼───────────────────┤
│ nginx │ latest │ abcd1234 │ 142MB │
│ mysql │ 8.0 │ efgh5678 │ 546MB │
│ hello-world │ latest │ ijkl9012 │ 13.3kB │
│ ubuntu │ 20.04 │ mnop3456 │ 72.9MB │
└─────────────────┴────────────┴──────────┴───────────────────┘🗑️ Borrar imágenes Docker
Eliminar una imagen específica:
docker rmi hello-worldo
docker image rm hello-worldEliminar imagen usando ID:
docker rmi ijkl9012Eliminar TODAS las imágenes no utilizadas:
docker image prune⚠️ Importante: Reglas de eliminación
NO PUEDES borrar una imagen si:
1. Tiene contenedores activos que la usan
2. Es utilizada por otras imágenes como base
SÍ PUEDES borrar una imagen si:
1. Todos sus contenedores están eliminados
2. No es dependencia de otras imágenes🔄 Comandos modernos vs tradicionales
| Acción | Comando moderno | Comando tradicional |
|---|---|---|
| Listar contenedores | docker container ls | docker ps |
| Eliminar contenedor | docker container rm | docker rm |
| Eliminar imagen | docker image rm | docker rmi |
| Limpiar contenedores | docker container prune | - |
| Limpiar imágenes | docker image prune | - |
💡 Analogía: La cocina de Docker
Imagina que estás cocinando:
Receta (Imagen) = Instrucciones para hacer una torta
Torta horneada (Contenedor) = Resultado de seguir la receta
Contenedor en ejecución = Torta siendo decorada
Contenedor detenido = Torta ya terminada en la nevera
Limpiar = Tirar tortas viejas y recetas que ya no usas
⚡ Buenas prácticas
Primero detén, luego elimina:
docker stop nombre-contenedor
docker rm nombre-contenedorVerifica antes de eliminar:
docker ps -a # Revisa qué hay
docker rm ... # Luego eliminaUsa nombres significativos:
docker run --name mi-web nginx # Mejor que ID aleatorioLimpia periódicamente:
# Programar limpieza semanal
docker container prune -f
docker image prune -f📝 Cuestionario
Pregunta 1
¿Qué comando muestra TODOS los contenedores, incluidos los detenidos?
a) docker ps
b) docker ps -a ✓
c) docker ls -all
d) docker container show
Pregunta 2
Para eliminar un contenedor llamado "mi-app", ¿cuál comando es correcto?
a) docker delete mi-app
b) docker remove mi-app
c) docker rm mi-app ✓
d) docker container delete mi-app
Pregunta 3
¿Qué hace el comando docker container prune?
a) Elimina todos los contenedores en ejecución
b) Elimina solo los contenedores detenidos ✓
c) Elimina todas las imágenes
d) Detiene todos los contenedores
Pregunta 4
Si intentas borrar una imagen pero aparece el error "image is being used", ¿qué debes hacer primero?
a) Forzar la eliminación con -f
b) Eliminar los contenedores que usan esa imagen ✓
c) Reiniciar Docker
d) Esperar 24 horas
Pregunta 5
¿Cuál es la diferencia entre docker rmi y docker image rm?
a) docker rmi es más rápido
b) Son sinónimos, hacen lo mismo ✓
c) docker image rm solo funciona en Linux
d) docker rmi es más antiguo y no debería usarse
Pregunta 6
¿Qué muestra este diagrama ASCII?
ANTES: [A] [B] [C] [D]
↑ ↑ ↑ ↑
Act Det Det Det
docker container prune
DESPUÉS: [A]
↑
Acta) Se eliminaron todas las imágenes
b) Se eliminaron todos los contenedores
c) Se eliminaron solo los contenedores detenidos ✓
d) Se reiniciaron todos los contenedores
✨ Tutorial Mejorado: Limpieza en Docker
🎯 Objetivo del Tutorial
Aprender a mantener tu entorno Docker limpio y organizado eliminando contenedores e imágenes que ya no necesitas.
🧠 Conceptos Clave
¿Por qué es importante limpiar?
Ahorra espacio en disco: Las imágenes y contenedores ocupan espacio
Mantiene el orden: Facilita encontrar lo que realmente necesitas
Mejora el rendimiento: Menos elementos = menos recursos consumidos
Evita conflictos: Previene problemas con versiones duplicadas
🛠️ Parte 1: Identificar qué tenemos
Paso 1: Ver contenedores
# Ver solo contenedores activos
docker ps
# Ver TODOS los contenedores (activos y terminados)
docker ps -aEjemplo de salida:
CONTAINER ID IMAGE STATUS NAMES
c3a8b1e2f4d0 nginx:latest Up 2 hours web-server
a1b2c3d4e5f6 hello-world Exited (0) 5 days ago friendly_mayer
e7f8g9h0i1j2 ubuntu:20.04 Exited (0) 2 weeks ago focused_curiePaso 2: Ver imágenes
# Listar todas las imágenes descargadas
docker images🗑️ Parte 2: Eliminar contenedores
Opción 1: Eliminar uno por uno
# Por ID (puedes usar solo los primeros caracteres)
docker rm a1b2c3d4
# Por nombre
docker rm friendly_mayer
# Forzar eliminación si está en ejecución
docker rm -f c3a8b1e2f4d0Opción 2: Eliminar múltiples contenedores
# Especificar varios IDs
docker rm a1b e7f c3a
# Eliminar TODOS los contenedores detenidos
docker container prune⚠️ Confirmación de seguridad:
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N]🖼️ Parte 3: Eliminar imágenes
Verificar dependencias primero
# Ver qué contenedores usan una imagen
docker ps -a --filter "ancestor=hello-world"Eliminar imágenes
# Eliminar por nombre y tag
docker rmi hello-world:latest
# Eliminar por ID
docker rmi d1165f221234
# Eliminar imágenes sin etiqueta (dangling)
docker image prune
# Eliminar TODAS las imágenes no usadas
docker image prune -a📋 Flujo de trabajo recomendado
# 1. Ver el estado actual
docker ps -a
docker images
# 2. Detener contenedores activos (si es necesario)
docker stop nombre-contenedor
# 3. Eliminar contenedores
docker container prune
# 4. Eliminar imágenes no utilizadas
docker image prune
# 5. Verificar resultados
docker ps -a
docker images💡 Consejos prácticos
Alias útiles para tu terminal:
# Agregar a ~/.bashrc o ~/.zshrc
alias dclean='docker container prune && docker image prune'
alias dlist='docker ps -a && echo "---" && docker images'Programar limpieza automática:
# En Linux/Mac, agregar a crontab:
0 2 * * 0 docker system prune -f # Cada domingo a las 2 AMComando todo-en-uno:
# Limpiar TODO (contenedores, imágenes, redes, volúmenes)
docker system prune -a🎮 Ejercicio práctico
Escenario:
Tienes estos recursos:
3 contenedores detenidos de pruebas
2 imágenes de versiones antiguas
1 contenedor en ejecución (no tocar)
Tu tarea:
Listar todo con
docker ps -aydocker imagesEliminar los 3 contenedores detenidos
Eliminar las 2 imágenes antiguas
Verificar que el contenedor en ejecución sigue funcionando
Comandos solución:
# Paso 1: Identificar
docker ps -a
docker images
# Paso 2: Eliminar contenedores (ejemplo con IDs)
docker rm cont1 cont2 cont3
# Paso 3: Eliminar imágenes (ejemplo)
docker rmi imagen-antigua:v1 imagen-antigua:v2
# Paso 4: Verificar
docker ps❓ Preguntas frecuentes
¿Puedo recuperar algo eliminado por error?
No, la eliminación en Docker es permanente. ¡Verifica dos veces antes de eliminar!
¿Qué pasa si elimino una imagen que estoy usando?
Si la imagen está en uso, Docker no te dejará eliminarla. Primero debes eliminar o detener los contenedores que la usan.
¿Con qué frecuencia debo limpiar?
Depende de tu uso. Si haces muchas pruebas, limpia semanalmente. En producción, hazlo con más cuidado y planificación.
¿docker system prune es seguro?
Sí, pero elimina TODO lo no utilizado. Úsalo cuando quieras una limpieza profunda.
📊 Resumen visual de comandos
COMANDOS DE LIMPIEZA DOCKER
├── Contenedores
│ ├── Listar: docker ps -a
│ ├── Eliminar uno: docker rm ID
│ └── Limpiar todos: docker container prune
│
└── Imágenes
├── Listar: docker images
├── Eliminar una: docker rmi NOMBRE
└── Limpiar todas: docker image prune -a¡Recuerda que la práctica hace al maestro! Intenta estos comandos en un entorno seguro y verás cómo mantener tu Docker organizado y eficiente
Comentarios
Publicar un comentario