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:

bash
docker ps

Esto muestra solo los contenedores en ejecución.

Listar TODOS los contenedores (activos y detenidos):

bash
docker ps -a

Representación ASCII del estado:

text
┌───────────────────────────────────┐
│                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

bash
docker rm a1b2c3d4

Método 2: Usando el nombre del contenedor

bash
docker rm web-server

Método 3: Usando solo los primeros caracteres del ID

bash
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

bash
docker rm a1b2c3d4 e5f6g7h8 i9j0k1l2

Opción B: Borrar TODOS los contenedores detenidos

bash
docker container prune
text
⚠️ ADVERTENCIA: Esto eliminará todos los contenedores detenidos
¿Estás seguro? [y/N] y

Diagrama del proceso:

text
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:

bash
docker images

Representación de imágenes:

text
┌─────────────────────────────────────────────────────────────┐
│                    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:

bash
docker rmi hello-world

o

bash
docker image rm hello-world

Eliminar imagen usando ID:

bash
docker rmi ijkl9012

Eliminar TODAS las imágenes no utilizadas:

bash
docker image prune

⚠️ Importante: Reglas de eliminación

text
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ónComando modernoComando tradicional
Listar contenedoresdocker container lsdocker ps
Eliminar contenedordocker container rmdocker rm
Eliminar imagendocker image rmdocker rmi
Limpiar contenedoresdocker container prune-
Limpiar imágenesdocker 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

  1. Primero detén, luego elimina:

bash
docker stop nombre-contenedor
docker rm nombre-contenedor
  1. Verifica antes de eliminar:

bash
docker ps -a  # Revisa qué hay
docker rm ... # Luego elimina
  1. Usa nombres significativos:

bash
docker run --name mi-web nginx  # Mejor que ID aleatorio
  1. Limpia periódicamente:

bash
# 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?

text
ANTES: [A] [B] [C] [D]
         ↑    ↑    ↑    ↑
        Act  Det  Det  Det

docker container prune

DESPUÉS: [A]
          ↑
         Act

a) 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

bash
# Ver solo contenedores activos
docker ps

# Ver TODOS los contenedores (activos y terminados)
docker ps -a

Ejemplo de salida:

text
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_curie

Paso 2: Ver imágenes

bash
# Listar todas las imágenes descargadas
docker images

🗑️ Parte 2: Eliminar contenedores

Opción 1: Eliminar uno por uno

bash
# 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 c3a8b1e2f4d0

Opción 2: Eliminar múltiples contenedores

bash
# Especificar varios IDs
docker rm a1b e7f c3a

# Eliminar TODOS los contenedores detenidos
docker container prune

⚠️ Confirmación de seguridad:

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

🖼️ Parte 3: Eliminar imágenes

Verificar dependencias primero

bash
# Ver qué contenedores usan una imagen
docker ps -a --filter "ancestor=hello-world"

Eliminar imágenes

bash
# 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

bash
# 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:

bash
# 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:

bash
# En Linux/Mac, agregar a crontab:
0 2 * * 0 docker system prune -f  # Cada domingo a las 2 AM

Comando todo-en-uno:

bash
# 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:

  1. Listar todo con docker ps -a y docker images

  2. Eliminar los 3 contenedores detenidos

  3. Eliminar las 2 imágenes antiguas

  4. Verificar que el contenedor en ejecución sigue funcionando

Comandos solución:

bash
# 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

text
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

Entradas más populares de este blog

14. Publish and Detached modes

12. Hola Mundo en Docker.

11¿Qué es Docker? y ¿Por qué debo saberlo?