ITSkillsCenter
Développement Web

Docker Compose en production : tutoriel 2026

2 min de lecture

📚 Cet article s’intègre dans notre parcours self-hosting Afrique de l’Ouest. Pour la stratégie complète (Coolify, Hetzner, Docker, sauvegarde, sécurité), voir le guide pilier self-hosting 2026.

Docker Compose en production demande quelques précautions au-delà du dev. Voici les patterns clés en 2026.

Voir notre guide Docker complet.

Structure recommandée

# compose.yml (production)
services:
  web:
    image: registry.exemple.sn/myapp:latest
    restart: unless-stopped
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: "0.5"
    environment:
      DATABASE_URL: ${DATABASE_URL}
    networks:
      - internal
      - traefik-public
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 30s
    labels:
      - traefik.enable=true
      - traefik.http.routers.web.rule=Host(`exemple.sn`)

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: app
      POSTGRES_USER: app
      POSTGRES_PASSWORD_FILE: /run/secrets/db_password
    secrets:
      - db_password
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - internal

volumes:
  db-data:

networks:
  internal:
  traefik-public:
    external: true

secrets:
  db_password:
    file: ./secrets/db_password.txt

Override par environnement

compose.yml          # base
compose.dev.yml      # overrides pour dev (ports exposés, volumes bind)
compose.prod.yml     # overrides pour prod (replicas, limits)

# Lancer
docker compose -f compose.yml -f compose.prod.yml up -d

Secrets en production

  • JAMAIS de credentials dans le YAML committé
  • Utiliser secrets Docker (fichiers montés en /run/secrets)
  • Ou variables d’env via .env file (gitignored)
  • Ou Docker Swarm secrets pour multi-host

Updates zero-downtime

# Pull la nouvelle image
docker compose pull web

# Recréer le service avec rolling update (Swarm)
docker service update --image registry/myapp:v2 web

# Sur compose simple : restart
docker compose up -d --no-deps web

Backup base de données

# Cron quotidien
docker exec compose-db-1 pg_dump -U app app | gzip > /backups/db-$(date +%F).sql.gz

Logs centralisés

services:
  web:
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

Pour observabilité avancée, brancher Loki ou Promtail (voir guide Grafana Loki).

Pour aller plus loin

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité