TechLead
Lección 7 de 18
5 min de lectura
Docker

Docker Compose

Define y ejecuta aplicaciones multi-contenedor con Docker Compose usando configuración YAML declarativa

¿Qué es Docker Compose?

Docker Compose es una herramienta para definir y ejecutar aplicaciones multi-contenedor. En lugar de ejecutar manualmente comandos docker run con múltiples opciones, describes toda tu pila de aplicación en un solo archivo docker-compose.yml.

Archivo Compose Básico

# docker-compose.yml
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro

Ejemplo Full Stack

# docker-compose.yml
services:
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secreto
      POSTGRES_DB: miapp
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U admin"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine

  api:
    build:
      context: ./api
      dockerfile: Dockerfile
    ports:
      - "4000:4000"
    environment:
      DATABASE_URL: postgres://admin:secreto@db:5432/miapp
      REDIS_URL: redis://redis:6379
    depends_on:
      db:
        condition: service_healthy
    restart: unless-stopped

  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    depends_on:
      - api

volumes:
  postgres-data:

Comandos de Compose

# Iniciar todos los servicios
docker compose up

# Iniciar en modo separado
docker compose up -d

# Construir e iniciar
docker compose up --build

# Detener todos los servicios
docker compose down

# Detener y eliminar volúmenes
docker compose down -v

# Ver logs de servicios
docker compose logs -f api

# Listar servicios en ejecución
docker compose ps

# Ejecutar un comando en un servicio
docker compose exec api sh

Puntos Clave

  • ✅ Docker Compose define toda tu pila en un solo archivo
  • ✅ Usa depends_on con health checks para un orden de inicio confiable
  • ✅ Usa archivos override para configuración específica de desarrollo
  • ✅ Los volúmenes nombrados en la sección volumes persisten datos

Continuar Aprendiendo