Ejecución de Contenedores en Docker
Resumen de una línea
Cómo ejecutar, gestionar y controlar contenedores Docker: docker run, ciclo de vida, mapeamiento de puertos, y operaciones básicas de gestión.
Información
- Fuente: Curso Docker 2024 - Módulo 2
- URL Plataforma: https://plataforma.josedomingo.org/pledin/cursos/docker2024/
- URL GitHub: https://github.com/josedom24/curso_docker_ow
- Líneas de contenido: 734
Conceptos Fundamentales
1. Descarga de Imágenes: docker pull
docker pull ubuntu # Descargar imagen
docker pull ubuntu:22.04 # Versión específica
docker images # Ver imágenes descargadas2. Ejecución de Contenedores: docker run
Sintaxis básica:
docker run [opciones] imagen [comando]Ejemplos:
# Ejecutar comando y salir
docker run ubuntu echo 'Hello World'
# Modo interactivo (stdin)
docker run -it ubuntu bash # -i (stdin), -t (terminal)
# Modo demonio (background)
docker run -d --name mi-app ubuntu bash -c 'while true; do echo $(date); sleep 1; done'
# Con puerto mapeado
docker run -d -p 8080:80 httpd:2.4 # puerto_host:puerto_contenedorOpciones comunes:
-d(—detach): Ejecutar en background-it: Interactivo con terminal--name: Nombrar el contenedor-p: Mapear puertos (host:contenedor)-e: Variables de entorno-v: Volúmenes/bind mounts--rm: Eliminar al terminar
3. Ciclo de Vida de Contenedores
┌─────────────┐
│ Created │
└──────┬──────┘
│ docker start
▼
┌─────────────┐
│ Running │◄─────────┐
└──────┬──────┘ │ docker restart
│ docker stop │
▼ │
┌─────────────┐ │
│ Stopped ├──────────┘
└──────┬──────┘
│ docker rm
▼
┌─────────────┐
│ Deleted │
└─────────────┘
Operaciones adicionales:
- docker pause: Pausa (sin stop)
- docker unpause: Reanuda
Comandos principales:
docker start nombre # Inicia contenedor parado
docker stop nombre # Para contenedor en ejecución
docker restart nombre # Para e inicia
docker pause nombre # Pausa
docker unpause nombre # Reanuda
docker rename viejo nuevo # Renombra
docker rm nombre # Elimina
docker rm -f nombre # Elimina forzado (aunque esté corriendo)4. Visualización de Información
Ver contenedores:
docker ps # Contenedores en ejecución
docker ps -a # Todos (incluyendo parados)
docker ps -a --format "table {{.Names}}\t{{.Status}}" # Formato personalizadoVer logs:
docker logs nombre # Ver output del contenedor
docker logs -f nombre # Seguimiento en vivo (-f = follow)
docker logs --tail 50 nombre # Últimas 50 líneasInformación de eventos:
docker events # Ver eventos en tiempo realEjemplo de eventos al crear un contenedor:
container create ...
container attach ...
network connect ... (bridge)
container start ...
container die ... (cuando termina)
5. Ejecución de Comandos en Contenedor: docker exec
# Ejecutar comando en contenedor corriendo
docker exec nombre comando
# Ejemplos:
docker exec mi-app ls # Listar archivos
docker exec mi-app cat archivo # Ver archivo
docker exec mi-app bash # Shell interactivo
docker exec -it mi-app bash # Shell interactivo + terminal6. Copiar Archivos: docker cp
# Host → Contenedor
docker cp archivo.txt nombre:/ruta/destino
# Contenedor → Host
docker cp nombre:/ruta/archivo.txt .7. Información Detallada: docker inspect
# Información completa (JSON)
docker inspect nombre
# Filtrar campos específicos:
docker inspect --format='{{.Id}}' nombre # ID del contenedor
docker inspect --format='{{.Config.Image}}' nombre # Imagen usado
docker inspect --format='{{.State.Status}}' nombre # Estado actual
docker inspect -s nombre # Incluir tamaño8. Procesos en Contenedor: docker top
docker top nombre # Ver procesos corriendo en contenedorCasos de Uso Prácticos
Ejemplo 1: Servidor Web Apache
# Crear contenedor con Apache
docker run -d --name my-apache-app -p 8080:80 httpd:2.4
# Verificar puertos mapeados
docker port my-apache-app
# Salida:
# 80/tcp -> 0.0.0.0:8080
# 80/tcp -> [::]:8080
# Acceder: http://localhost:8080Conceptos:
-p 8080:80: Puerto 8080 del host → puerto 80 del contenedor- Los contenedores no se acceden directamente por IP
- Siempre se mapean puertos explícitamente
Ejemplo 2: Contenedor con Base de Datos MariaDB
docker run -d \
--name mariadb-container \
-e MYSQL_ROOT_PASSWORD=secreto \
-p 3306:3306 \
mariadb:latestConceptos:
-e: Pasar variables de entorno- El servicio es accesible en localhost:3306
Ejemplo 3: Contenedor Interactivo
docker run -it --rm --name ubuntu-shell ubuntu bash
# Dentro del contenedor:
root@abc123:/# apt-get update
root@abc123:/# python --version
# exit → contenedor se elimina (--rm)Conceptos Importantes
Mapeamiento de Puertos
Host (localhost:8080)
↓
Docker daemon
↓
Contenedor (172.17.0.2:80)
Nunca accedes directamente a la IP del contenedor. Siempre mapeas puertos explícitamente con -p.
Ciclo de Vida
- Created: Contenedor existe pero no corre
- Running: Contenedor ejecutándose
- Stopped: Contenedor parado (puede reiniciarse)
- Deleted: Contenedor eliminado
Logs y Debugging
Los logs son cruciales:
docker logs -f nombre # Seguir logs en vivo
docker inspect nombre # Información completa
docker exec -it nombre bash # Conectarse y debuguearComandos Cheat Sheet
Comando Descripción
docker run Crear y ejecutar contenedor
docker ps Listar contenedores
docker start/stop Controlar ciclo de vida
docker logs Ver salida
docker exec Ejecutar comando adentro
docker cp Copiar archivos
docker inspect Información detallada
docker port Ver mapeamiento de puertos
docker rm Eliminar contenedor
Relaciones
Conecta con
- Docker — Plataforma base
- Contenedores — Lo que estamos ejecutando
- Docker Compose — Orquestación de múltiples contenedores
Parte de
- Ciclo de vida de contenedores — Gestión completa
- Redes en Docker — Mapeamiento de puertos
Ideas Clave del Módulo
docker runes el comando principal para crear y ejecutar contenedores- Mapear puertos explícitamente con
-p(no acceder por IP del contenedor) - Ciclo de vida: created → running → stopped → deleted
- Modo interactivo (-it) para debugging
- Modo demonio (-d) para servicios de larga vida
- docker exec para ejecutar comandos en contenedores corriendo
- docker logs -f para debugging en tiempo real
- docker inspect para información detallada en JSON