Volver al curso

DevOps Moderno: CI/CD, Docker y Kubernetes

leccion
2 / 12
advanced
30 horas
Contenedores con Docker

Docker Compose: Orquestacion Local de Servicios

Lectura
45 min~2 min lectura

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:
ComandoDescripcion
docker compose up -dLevantar todos los servicios en background
docker compose downDetener y eliminar contenedores
docker compose logs -f appVer logs en tiempo real del servicio app
docker compose build --no-cacheReconstruir imagenes sin cache
docker compose exec app shAbrir shell en contenedor
docker compose psVer 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:
Docker networking

Con Docker Compose dominado, estas listo para la orquestacion a escala con Kubernetes.