Docker Compose Multi-Container Deployment: Building Complete Application Orchestration

Docker Compose is a tool for defining and running multi-container Docker applications. With a single YAML file, you can configure your entire application stack.

1. Basic Usage

version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
    depends_on:
      - db
      - redis

  db:
    image: postgres:16
    volumes:
      - postgres-data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: myapp
      POSTGRES_PASSWORD: secret

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

volumes:
  postgres-data:

2. Network Configuration

services:
  frontend:
    networks:
      - frontend
      - backend

  api:
    networks:
      - backend

  db:
    networks:
      - backend

networks:
  frontend:
  backend:

3. Environment Management

# docker-compose.override.yml (Development)
services:
  web:
    environment:
      - DEBUG=true
    volumes:
      - .:/app

# docker-compose.prod.yml (Production)
services:
  web:
    environment:
      - NODE_ENV=production
      - DEBUG=false
# Development
docker compose up

# Production
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

4. Health Checks

services:
  web:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3

5. Common Commands

docker compose up -d         # Start in background
docker compose down          # Stop and remove
docker compose logs -f       # View logs
docker compose build         # Build images
docker compose exec web sh   # Enter container
docker compose restart web   # Restart service

6. Production Best Practices

  1. Use .env files to manage environment variables
  2. Configure resource limits (CPU/memory)
  3. Set restart policies
  4. Use named volumes for data persistence
  5. Never hardcode sensitive information in containers