Files
DevOps-Security-Agent-Skills/devops/containers/docker-compose/references/compose-patterns.md
T

125 lines
1.8 KiB
Markdown
Raw Normal View History

2026-01-27 17:35:45 -05:00
# Docker Compose Patterns
## Basic Structure
```yaml
version: '3.8'
services:
app:
build: .
ports:
- "8080:80"
environment:
- NODE_ENV=production
depends_on:
- db
networks:
- frontend
- backend
db:
image: postgres:15
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: myapp
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password
networks:
- backend
volumes:
db_data:
networks:
frontend:
backend:
secrets:
db_password:
file: ./secrets/db_password.txt
```
## Health Checks
```yaml
services:
app:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
```
## Resource Limits
```yaml
services:
app:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
```
## Multiple Compose Files
```bash
# Base + overrides
docker compose -f docker-compose.yml -f docker-compose.prod.yml up
# Or use COMPOSE_FILE
export COMPOSE_FILE=docker-compose.yml:docker-compose.prod.yml
docker compose up
```
## Environment Variables
```yaml
# .env file
services:
app:
image: myapp:${VERSION:-latest}
environment:
- DATABASE_URL=${DATABASE_URL}
env_file:
- .env
- .env.local
```
## Service Profiles
```yaml
services:
app:
profiles: [] # Always starts
debug:
profiles: [debug]
# Only starts with --profile debug
```
## Extension Fields
```yaml
x-common: &common
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "10m"
services:
app:
<<: *common
image: myapp
```