Docker-Compose
Docker-Compose
Basic Setup
Create docker-compose.yml:
version: "3.8"
services:
echoserver:
image: echoserver:latest
ports:
- "80:80"
environment:
- LOGS__LEVEL=info
- LOGS__FORMAT=object
restart: unless-stopped
Start the service:
# Start in foreground
docker-compose up
# Start in background
docker-compose up -d
# View logs
docker-compose logs -f
# Stop
docker-compose down
Development Configuration
docker-compose.dev.yml:
version: "3.8"
services:
echoserver:
build: .
ports:
- "80:80"
environment:
- LOGS__LEVEL=debug
- LOGS__FORMAT=default
- ENABLE_FILE=true
- ENABLE_ENV=true
volumes:
- ./:/app
restart: unless-stopped
Run:
docker-compose -f docker-compose.dev.yml up
Production Configuration
docker-compose.prod.yml:
version: "3.8"
services:
echoserver:
image: echoserver:latest
ports:
- "80:80"
environment:
- LOGS__LEVEL=info
- LOGS__FORMAT=object
- ENABLE_FILE=false
- ENABLE_ENV=false
deploy:
replicas: 3
resources:
limits:
cpus: '0.5'
memory: 128M
restart: always
read_only: true
tmpfs:
- /tmp
security_opt:
- no-new-privileges:true
Run:
docker-compose -f docker-compose.prod.yml up -d
Multi-Environment Setup
Use override files for different environments:
# Base + Development
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
# Base + Production
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
Health Checks
Add health checks to your compose file:
services:
echoserver:
image: echoserver:latest
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
Commands
# Start services
docker-compose up -d
# Stop services
docker-compose down
# View logs
docker-compose logs -f
# Check status
docker-compose ps
# Rebuild and restart
docker-compose up -d --build
# Remove everything including volumes
docker-compose down -v
Next: Kubernetes →