Compose multi-environnements
Une seule définition Compose, plusieurs environnements (dev, staging, prod). Le mécanisme d'override de Compose permet de factoriser la configuration commune et de surcharger uniquement ce qui diffère par environnement.
Fichiers d'override
Compose fusionne automatiquement compose.yml et compose.override.yml. Les valeurs du fichier override remplacent ou complètent celles du fichier de base.
# compose.yml — configuration commune
services:
api:
image: myapp:${APP_VERSION}
environment:
DB_HOST: db
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 10s
db:
image: postgres:16
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:# compose.override.yml — surcharge dev (chargée automatiquement)
services:
api:
build: . # build local en dev, image distante en prod
volumes:
- .:/app # hot reload
environment:
DEBUG: "true"
db:
ports:
- "5432:5432" # exposé en local pour les outils de dev# compose.prod.yml — spécifique production
services:
api:
deploy:
replicas: 3
resources:
limits:
memory: 512M
restart: unless-stopped
db:
# pas de port exposé en prod# Dev (compose.yml + compose.override.yml automatique)
docker compose up -d
# Production (compose.yml + compose.prod.yml)
docker compose -f compose.yml -f compose.prod.yml up -d
# Vérifier la configuration fusionnée
docker compose -f compose.yml -f compose.prod.yml configProfiles
services:
api:
image: myapp:latest
debug-tools:
image: nicolaka/netshoot
profiles: [debug] # démarré seulement avec --profile debug
migration:
image: myapp:latest
command: python manage.py migrate
profiles: [tools]
depends_on:
- db# Démarrer uniquement les services sans profil
docker compose up -d
# Inclure les services du profil debug
docker compose --profile debug up -d
# Lancer la migration
docker compose --profile tools run --rm migrationFichiers .env par environnement
# Structure recommandée
.env.dev
.env.staging
.env.prod
compose.yml
compose.prod.ymldocker compose --env-file .env.staging -f compose.yml -f compose.prod.yml up -d