Isaac.

Docker Compose Advanced Guide

Master advanced Docker Compose features for production.

By EMEPublished: February 20, 2025
docker composeorchestrationnetworkingvolumes

A Simple Analogy

Docker Compose is like a conductor orchestrating an orchestra. Each instrument (container) plays its part in harmony.


Why Docker Compose?

  • Multi-container: Manage multiple services
  • Development: Easy local environment
  • Networking: Built-in service discovery
  • Volumes: Persistent data management
  • Scaling: Scale services easily

Full Example

version: '3.9'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/myapp
    depends_on:
      - db
      - redis
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: myapp
    volumes:
      - db_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

volumes:
  db_data:
  redis_data:

networks:
  default:
    name: myapp-network

Build Configuration

web:
  build:
    context: .
    dockerfile: Dockerfile
    args:
      BUILD_DATE: 2025-02-20
      VERSION: 1.0
    target: production
  image: myapp:latest

Advanced Networking

services:
  frontend:
    networks:
      - frontend
  
  backend:
    networks:
      - backend
  
  db:
    networks:
      - backend

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge

Commands

# Build images
docker compose build

# Start services
docker compose up -d

# View logs
docker compose logs -f web

# Scale service
docker compose up -d --scale worker=3

# Stop services
docker compose down

# Remove volumes
docker compose down -v

Best Practices

  1. Health checks: Define startup verification
  2. Dependencies: Use depends_on for ordering
  3. Networking: Use service names for communication
  4. Volumes: Separate data from code
  5. Environment: Use .env files for secrets

Related Concepts

  • Docker Swarm
  • Kubernetes
  • Container orchestration
  • Microservices

Summary

Docker Compose simplifies multi-container development. Use services, networking, volumes, and health checks for production-ready setups.