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
- Use .env files to manage environment variables
- Configure resource limits (CPU/memory)
- Set restart policies
- Use named volumes for data persistence
- Never hardcode sensitive information in containers