Introduccion a Docker Compose - Configuracion multi-contenedor

Intermedio | 50 min de lectura | 2024.12.26

Lo que aprenderas en este tutorial

✓ Fundamentos de Docker Compose
✓ Definicion de servicios
✓ Redes y volumenes
✓ Gestion de variables de entorno
✓ Ejemplos de configuracion practica

Step 1: compose.yaml basico

# compose.yaml
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
    volumes:
      - .:/app
      - /app/node_modules
    depends_on:
      - db

  db:
    image: postgres:16
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

volumes:
  postgres_data:

Step 2: Dockerfile

FROM node:20-alpine

WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .

EXPOSE 3000
CMD ["npm", "run", "dev"]

Step 3: Comandos basicos

# Iniciar
docker compose up -d

# Ver logs
docker compose logs -f web

# Detener
docker compose down

# Reconstruir
docker compose up -d --build

# Lista de servicios
docker compose ps

Step 4: Configuracion para produccion

# compose.prod.yaml
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile.prod
    restart: always
    environment:
      - NODE_ENV=production

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - web
docker compose -f compose.prod.yaml up -d

Step 5: Ejemplo de entorno combinado

services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
      - redis

  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: password
    volumes:
      - db_data:/var/lib/postgresql/data

  redis:
    image: redis:alpine
    ports:
      - "6379:6379"

  adminer:
    image: adminer
    ports:
      - "8080:8080"

volumes:
  db_data:

Resumen

Con Docker Compose puedes construir y compartir facilmente entornos de desarrollo. Gestiona declarativamente las dependencias entre servicios y las redes.

← Volver a la lista