Chart Structure
The Docker Compose Wrapper uses a chart-based structure for managing configurations and deployments.
Chart Directory Structure
.
├── Chart.yaml # Chart metadata
├── values.yaml # Default values
├── environments/ # Environment-specific values
│ ├── dev.yaml
│ ├── staging.yaml
│ └── prod.yaml
├── templates/ # Template files
│ ├── docker-compose.yaml
│ ├── networks.yaml
│ └── _helpers.tpl
└── releases/ # Release history
└── v1/
├── values.yaml
└── docker-compose.yaml
Chart.yaml
The main chart metadata file:
name: myapp
version: 1.0.0
description: My Application Chart
type: application
Values Structure
Default Values (values.yaml)
global:
projectName: myapp
environment: development
services:
web:
image: myapp/web:latest
replicas: 1
ports:
- "8080:80"
environment:
- NODE_ENV=development
volumes:
- ./data:/app/data
networks:
- frontend
rollingUpdate:
replicas: 2
retryCount: 5
retryInterval: 10
api:
image: myapp/api:latest
replicas: 1
ports:
- "3000:3000"
environment:
- DB_HOST=db
networks:
- frontend
- backend
rollingUpdate:
replicas: 2
retryCount: 5
retryInterval: 10
db:
image: postgres:13
environment:
- POSTGRES_DB=myapp
- POSTGRES_USER=myapp
volumes:
- db_data:/var/lib/postgresql/data
networks:
- backend
networks:
frontend:
driver: bridge
backend:
driver: bridge
volumes:
db_data:
Environment-specific Values
Example for production (environments/prod.yaml):
global:
environment: production
services:
web:
image: myapp/web:prod
replicas: 3
rollingUpdate:
replicas: 3
retryCount: 10
retryInterval: 30
environment:
- NODE_ENV=production
api:
image: myapp/api:prod
replicas: 3
rollingUpdate:
replicas: 3
retryCount: 10
retryInterval: 30
environment:
- NODE_ENV=production
Template Files
docker-compose.yaml
version: '3.8'
services:
:
image:
deploy:
replicas:
ports:
environment:
volumes:
networks:
networks:
volumes:
_helpers.tpl
Value Precedence
Values are merged in the following order (highest to lowest precedence):
- Command-line arguments
- Environment-specific values
- Default values from values.yaml
- Chart defaults
Release Management
Each release is stored in the releases directory with:
- Versioned values
- Rendered templates
- Release metadata
Example release structure:
releases/
└── v1/
├── values.yaml
├── docker-compose.yaml
└── metadata.yaml
Best Practices
- Value Organization
- Keep global values at the root level
- Group service-specific values under
services - Use environment-specific overrides for differences
- Template Usage
- Use helper templates for common patterns
- Keep templates DRY (Don’t Repeat Yourself)
- Use conditional rendering for optional features
- Environment Management
- Keep environment-specific changes minimal
- Use environment variables for sensitive data
- Document environment-specific requirements
- Release Management
- Version all releases
- Keep release history for rollbacks
- Document release changes