🐳 Module V7 – Mise en Ɠuvre de Docker Compose

📘 Cours complet ⏱ 2h30 🎯 Bloc 4 – Virtualisation
Objectifs : maĂźtriser l’orchestration de conteneurs avec Docker Compose, dĂ©finir des services en YAML, gĂ©rer rĂ©seaux et volumes, dĂ©ployer une application multi‑conteneurs.

📖 Introduction

Docker Compose est un outil permettant de dĂ©finir et de lancer des applications multi‑conteneurs Docker. GrĂące Ă  un fichier docker-compose.yml, vous pouvez dĂ©crire l’ensemble des services (conteneurs), leurs images, leurs ports, leurs variables d’environnement, leurs volumes et leurs dĂ©pendances. Un simple docker compose up dĂ©ploie toute l’application de maniĂšre reproductible.

📌 Évolution rĂ©cente : Depuis la version 2.0 de Docker Compose (intĂ©grĂ©e Ă  Docker Engine), la directive version n’est plus obligatoire. Vous pouvez commencer directement par services: ou utiliser --- (dĂ©but d’un document YAML). Les exemples ci‑dessous utilisent la syntaxe moderne, sans la ligne version.
🎯

À l'issue de ce module, vous serez capable de :

  • Comprendre la structure d’un fichier docker-compose.yml moderne.
  • DĂ©finir des services, des rĂ©seaux et des volumes.
  • Utiliser les commandes essentielles de Docker Compose.
  • DĂ©ployer une application LAMP / WordPress en quelques minutes.

🔍 Qu'est-ce que Docker Compose ?

Docker Compose est un outil d’orchestration simple qui permet de gĂ©rer des applications composĂ©es de plusieurs conteneurs.

📐 Structure du fichier docker-compose.yml

⚠ Syntaxe moderne : La directive version est optionnelle. Si vous utilisez une version rĂ©cente de Docker Compose (≄ 2.0), vous pouvez omettre la ligne version: et commencer directement par services: ou par ---.
SectionRĂŽleExemples
ServicesDéfinition des conteneurs (nom, image, ports, variables...).web: image: nginx:latest
NetworksRéseaux personnalisés pour isoler les services.app-network
VolumesVolumes nommés pour persister les données.db-data

đŸ› ïž Syntaxe YAML – rappel

đŸ§Ș Exemple complet – Stack WordPress

docker-compose.yml (syntaxe moderne, sans version)

services:
  db:
    image: mysql:8.0
    container_name: wordpress_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: wppass
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - wp-network

  wordpress:
    image: wordpress:latest
    container_name: wordpress_app
    restart: always
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: wppass
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp-data:/var/www/html
    networks:
      - wp-network
    depends_on:
      - db

volumes:
  db-data:
  wp-data:

networks:
  wp-network:
  • db : service MySQL, avec variables d’environnement et volume pour persister les donnĂ©es.
  • wordpress : service WordPress, exposĂ© sur le port 8080 de l’hĂŽte.
  • depends_on : assure que la base de donnĂ©es dĂ©marre avant WordPress.
  • volumes nommĂ©s : db-data et wp-data persistent entre les redĂ©marrages.
  • rĂ©seau : les deux services communiquent via wp-network.
  • Absence de version : syntaxe compatible avec les versions rĂ©centes de Docker Compose.

📋 Commandes essentielles

CommandeDescription
docker compose up -dLance tous les services en arriùre‑plan.
docker compose downArrĂȘte et supprime les conteneurs, rĂ©seaux (et volumes si -v).
docker compose logs -fAffiche les logs en temps réel.
docker compose psListe les conteneurs du projet.
docker compose exec <service> bashOuvre un shell dans un conteneur.
docker compose restartRedémarre tous les services.

📂 Gestion des volumes et rĂ©seaux

đŸ§Ș Mise en pratique

1. Créer un projet Docker Compose

mkdir ~/mon-projet-compose
cd ~/mon-projet-compose
nano docker-compose.yml

Collez l’exemple ci‑dessus, puis lancez :

docker compose up -d

Accédez à http://localhost:8080 pour voir WordPress.

2. Ajouter un service phpMyAdmin

phpmyadmin:
  image: phpmyadmin/phpmyadmin
  container_name: wordpress_phpmyadmin
  restart: always
  ports:
    - "8081:80"
  environment:
    PMA_HOST: db
    PMA_PORT: 3306
  networks:
    - wp-network
  • PMA_HOST: db : se connecte Ă  la base via le service db.
  • PMA_PORT: 3306 : port par dĂ©faut de MySQL.
  • Le rĂ©seau wp-network est partagĂ© avec la base et WordPress.

📝 Exercices d'application

Exercice 1 – Analyse de fichier Compose

Dans l’exemple WordPress, quel est le rîle du champ depends_on ?

depends_on dĂ©finit l’ordre de dĂ©marrage des services. Ici, WordPress ne dĂ©marre que si la base db est dĂ©jĂ  lancĂ©e.

Exercice 2 – Ajout de service

Comment ajouter un service Redis Ă  une stack existante ?

redis:
  image: redis:alpine
  container_name: app_redis
  restart: always
  networks:
    - wp-network

🎯 Quiz d'auto‑évaluation

1. Le fichier docker-compose.yml utilise la syntaxe YAML.

2. La commande docker compose up -d lance les conteneurs en arriùre‑plan.

3. La section volumes permet de définir des volumes nommés.

4. La directive ports: - "8080:80" expose le port 80 du conteneur sur le port 8080 de l’hîte.

5. La commande docker compose down supprime les conteneurs, les réseaux, mais pas les volumes par défaut.

6. La ligne version: est obligatoire dans tous les fichiers docker-compose.yml.

📚 Ressources


← Retour au portail
BTS SIO – LycĂ©e NDLP Avranches – Module V7 v1.1