Leçon 6 / 8
Leçon 06 · Partie 2 — Aller plus loin

Docker Compose

Pourquoi Docker Compose ?

Une vraie app est rarement un seul service. Tu as un backend, une base de données, un cache Redis, un reverse proxy… Lancer chaque conteneur à la main avec docker run devient vite pénible.

Docker Compose te permet de définir et gérer plusieurs conteneurs dans un seul fichier YAML. Une commande pour tout démarrer, une commande pour tout arrêter.

La structure d'un compose.yaml

compose.yaml
services:

  app:
    build: .                    # builder depuis le Dockerfile local
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
      - NODE_ENV=production
    depends_on:
      - db
    volumes:
      - ./uploads:/app/uploads

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - db-data:/var/lib/postgresql/data

  cache:
    image: redis:7-alpine
    command: redis-server --appendonly yes

volumes:
  db-data:
💡

Le nom du fichier recommandé depuis Docker Compose V2 est compose.yaml (sans tiret). L'ancien nom docker-compose.yml est encore supporté pour la compatibilité. Sur les systèmes récents, la commande est docker compose (avec espace, pas tiret).

Les commandes essentielles

Terminal
# Démarrer tous les services en arrière-plan
docker compose up -d

# Voir les logs de tous les services
docker compose logs -f

# Logs d'un service spécifique
docker compose logs -f app

# Voir l'état des services
docker compose ps

# Redémarrer un seul service
docker compose restart app

# Rebuild et redémarrer après modification du Dockerfile
docker compose up -d --build app

# Arrêter tous les services (conteneurs conservés)
docker compose stop

# Arrêter ET supprimer les conteneurs
docker compose down

# Supprimer aussi les volumes (ATTENTION : perte de données)
docker compose down -v

Clés importantes du compose.yaml

  • image — utilise une image existante depuis un registre
  • build — chemin vers un Dockerfile à builder
  • ports — mapping des ports (HOST:CONTENEUR)
  • environment — variables d'environnement du conteneur
  • volumes — montages de fichiers/volumes
  • depends_on — ordre de démarrage des services
  • networks — réseau(x) auquel appartient le service
  • restart — politique de redémarrage (no, always, on-failure, unless-stopped)
⚠️

depends_on garantit l'ordre de démarrage des conteneurs, pas que le service soit réellement prêt. Si ton app démarre avant que postgres soit prêt à accepter des connexions, ajoute une logique de retry dans ton code ou utilise healthcheck.

// À retenir
  • Docker Compose = fichier YAML pour déclarer et gérer plusieurs conteneurs ensemble.
  • docker compose up -d démarre tout. docker compose down arrête et supprime.
  • Chaque service dans services: peut avoir image ou build, plus ports, volumes, environment.
  • depends_on contrôle l'ordre de démarrage (pas la disponibilité du service).
  • Tous les services d'un compose partagent le même réseau par défaut — ils se voient par leur nom de service.