| name | docker-compose |
| description | Generate Compose configs with services, networking, volumes, and health checks |
Docker Compose Configuration Skill
Overview
This skill generates Docker Compose configurations for multi-container applications. It creates properly structured compose files with:
- Service definitions
- Network configuration
- Volume management
- Health checks
- Dependencies
- Environment configuration
Activation
Use this skill when:
- Creating a new compose file
- Adding services to existing compose
- Configuring container orchestration
- Setting up development or production environments
Process
1. Understand Requirements
Gather information about:
- Required services (web, api, database, cache, etc.)
- Environment (development/production)
- Networking needs (internal, external, SSL)
- Persistence requirements
- Scaling needs
2. Consult Documentation
Read relevant documentation:
03-compose-fundamentals.mdfor structure04-networking.mdfor networks05-databases.mdfor database services06-services.mdfor dependencies08-volumes.mdfor persistence
3. Generate Configuration
Create compose file following best practices:
# Modern compose (no version field)
services:
app:
build:
context: .
dockerfile: Dockerfile
restart: unless-stopped
ports:
- "3000:3000"
environment:
- NODE_ENV=production
depends_on:
db:
condition: service_healthy
networks:
- frontend
- backend
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- backend
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${DB_USER}"]
interval: 10s
timeout: 5s
retries: 5
volumes:
postgres_data:
networks:
frontend:
backend:
internal: true
Service Patterns
Web Application
services:
web:
build: .
ports:
- "80:80"
depends_on:
- api
API Service
services:
api:
build: ./api
expose:
- "3000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/app
depends_on:
db:
condition: service_healthy
Database Service
services:
db:
image: postgres:16-alpine
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
retries: 5
Cache Service
services:
redis:
image: redis:7-alpine
command: redis-server --appendonly yes
volumes:
- redis_data:/data
Background Worker
services:
worker:
build: .
command: npm run worker
depends_on:
- db
- redis
Network Patterns
Internal Database Network
networks:
backend:
internal: true # No external access
External Shared Network
networks:
proxy:
external: true
name: traefik_proxy
Volume Patterns
Named Volume
volumes:
postgres_data:
Bind Mount (Development)
volumes:
- ./src:/app/src
Anonymous Volume
volumes:
- /app/node_modules
Environment Patterns
Direct Values
environment:
- NODE_ENV=production
From .env File
env_file:
- .env
With Defaults
environment:
- DB_HOST=${DB_HOST:-localhost}
Output
Generated compose file includes:
- All required services
- Proper network configuration
- Volume definitions
- Health checks
- Dependency management
- Environment configuration
- Comments for complex settings