Passer au contenu principal

Compose (Docker)

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 config

Profiles

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 migration

Fichiers .env par environnement

# Structure recommandée
.env.dev
.env.staging
.env.prod
compose.yml
compose.prod.yml
docker compose --env-file .env.staging -f compose.yml -f compose.prod.yml up -d