Orchestration avec Docker Compose

Docker
Système & Réseau
Définir et exécuter des applications multi-conteneurs complexes grâce au fichier déclaratif docker-compose.yml.

Jusqu’à présent, pour déployer une application composée d’un serveur web, d’un backend et d’une base de données, nous devions exécuter plusieurs longues commandes docker run, créer manuellement des réseaux et des volumes, et gérer soigneusement l’ordre de démarrage à la main.

Docker Compose transforme ce processus manuel en Infrastructure as Code (IaC) : il permet de décrire l’ensemble de votre architecture multi-conteneurs dans un unique fichier déclaratif au format YAML nommé docker-compose.yml.

📄 Du CLI au Fichier YAML (IaC)

Comparez la différence d’effort et de clarté entre la gestion manuelle en ligne de commande (CLI) et l’utilisation de Docker Compose :

❌ Avant : Commandes CLI Manuelles
# 1. Créer le réseau
docker network create mon-reseau

# 2. Lancer la base de données
docker run -d --name ma-db \
  --network mon-reseau \
  -v db-data:/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD=secret \
  postgres:15

# 3. Lancer l'application web
docker run -d --name webapp \
  --network mon-reseau \
  -p 8080:80 \
  -e DB_HOST=ma-db \
  mon-app-image
✅ Après : Fichier docker-compose.yml
services:
  ma-db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - db-data:/var/lib/postgresql/data

  webapp:
    image: mon-app-image
    ports:
      - "8080:80"
    environment:
      DB_HOST: ma-db # Résolution DNS automatique
    depends_on:
      - ma-db

volumes:
  db-data:

🕹️ Simulateur Interactif : Stack Docker Compose Multi-Services & Scaling

Expérimentez ci-dessous le cycle de vie et la mise à l’échelle (scaling) d’une architecture multi-conteneurs pilotée par Docker Compose :

Orchestrateur & Simulateur de Scaling Compose

Activer les options de déploiement et ajuster le nombre de réplicas Web :

Journal d’Orchestration Docker Compose

🔒 Gestion des Secrets & Profils d’Exécution

3.1. Les Secrets (secrets)

Pour ne pas exposer de mots de passe en clair dans des variables d’environnement (accessibles via docker inspect), Compose permet de monter des secrets de manière sécurisée sous /run/secrets/ :

services:
  db:
    image: postgres:15
    secrets:
      - db_password
    environment:
      POSTGRES_PASSWORD_FILE: /run/secrets/db_password

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

🛠️ Exercice Interactif : “The Broken Stack” (Troubleshooting)

🕵️‍♂️ Mission Débogage

Un développeur débutant a tenté d’orchestrer une stack WordPress + MySQL avec le fichier YAML ci-dessous, mais rien ne fonctionne. Saurez-vous identifier les 3 erreurs critiques ?

Code YAML Défectueux
services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: localhost        # ERREUR 1 ?
      WORDPRESS_DB_PASSWORD: secret

  db_server:
    image: mysql:8.0
    enviromnent:                           # ERREUR 2 ?
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - ./db_data:/var/lib/mysql
  1. Erreur WORDPRESS_DB_HOST: localhost : localhost fait référence au conteneur WordPress lui-même ! Il faut utiliser le nom du service MySQL : WORDPRESS_DB_HOST: db_server.
  2. Erreur de frappe enviromnent: : La clé YAML est mal orthographiée (environment:). MySQL démarre sans mot de passe root configuré.
  3. Erreur de Volume Manquant : Dans volumes: - ./db_data:/var/lib/mysql, si c’est un volume nommé db_data, il manque sa déclaration globale en bas du fichier (volumes: db_data:).