Docker Compose: Multiples Servicios en Armonia
Docker Compose permite definir y ejecutar aplicaciones multi-contenedor. En lugar de ejecutar cada contenedor manualmente, defines todo tu stack en un archivo YAML y lo levantas con un solo comando. Es la herramienta estandar para desarrollo local y entornos de staging.
# docker-compose.yml - Stack completo de produccion
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- '3000:3000'
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/myapp
- REDIS_URL=redis://cache:6379
depends_on:
db:
condition: service_healthy
cache:
condition: service_started
restart: unless-stopped
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:3000/health']
interval: 30s
timeout: 10s
retries: 3
db:
image: postgres:16-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U user -d myapp']
interval: 10s
timeout: 5s
retries: 5
cache:
image: redis:7-alpine
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:| Comando | Descripcion |
|---|---|
| docker compose up -d | Levantar todos los servicios en background |
| docker compose down | Detener y eliminar contenedores |
| docker compose logs -f app | Ver logs en tiempo real del servicio app |
| docker compose build --no-cache | Reconstruir imagenes sin cache |
| docker compose exec app sh | Abrir shell en contenedor |
| docker compose ps | Ver estado de todos los servicios |
🚀 Dato Clave
Siempre usa healthchecks y depends_on con conditions para evitar race conditions al iniciar. Tu app no deberia intentar conectarse a la base de datos antes de que este lista.
Redes en Docker Compose
Docker Compose crea automaticamente una red interna donde los servicios se comunican por nombre. El servicio app puede conectarse a la base de datos usando db:5432 como hostname. No necesitas exponer puertos de la base de datos al host.
# Networking avanzado: multiples redes
services:
app:
networks:
- frontend
- backend
db:
networks:
- backend # Solo accesible desde backend
nginx:
networks:
- frontend # Solo accesible desde frontend
networks:
frontend:
backend:Con Docker Compose dominado, estas listo para la orquestacion a escala con Kubernetes.