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
- Understand Requirements
Gather information about:
-
Required services (web, api, database, cache, etc.)
-
Environment (development/production)
-
Networking needs (internal, external, SSL)
-
Persistence requirements
-
Scaling needs
- Consult Documentation
Read relevant documentation:
-
03-compose-fundamentals.md for structure
-
04-networking.md for networks
-
05-databases.md for database services
-
06-services.md for dependencies
-
08-volumes.md for persistence
- 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