Diaporama de notions

Docker Compose

Acte 2 · La partition : décrire toute l'application dans un seul fichier, prête à se lever d'une seule commande.

420-5A4-MT · Serveurs évolutifs · Compose
Où en est l'histoire

Les commandes s'allongent...

Deux conteneurs à démarrer dans le bon ordre, un réseau, des montages, des ports, des mots de passe : la semaine dernière, vos commandes docker run faisaient trois lignes chacune. Une erreur de frappe et rien ne fonctionne. L'entreprise décide d'écrire la recette complète une fois pour toutes : une partition, que n'importe quelle machine saura rejouer.

Notion 1

Docker Compose

Docker Compose est l'outil qui définit et exécute des applications multi-conteneurs. On décrit les services de l'application dans un fichier YAML, et une seule commande construit et démarre le tout.

Déclaratif, pas impératif

On ne dit plus comment faire, étape par étape : on décrit l'état voulu, et Compose s'arrange pour y arriver.

L'infrastructure en code

La recette est un fichier texte : on la versionne, on la partage, on la relit. L'installation redevient une connaissance écrite.

Notion 2

🖼️ Anatomie d'un docker-compose.yml

services:
web: # un service = un conteneur
image: wordpress # la recette de base
ports:
- 8082:80 # redirection hote:conteneur
volumes:
- ./wordpress:/var/www/html
environment:
WORDPRESS_DB_HOST: basededonnees
depends_on:
- basededonnees # ordre de demarrage
basededonnees:
image: mysql:8.0

En YAML, l'indentation est la grammaire : deux espaces, jamais de tabulations. La moitié des bogues de la semaine seront des problèmes d'indentation.

Notion 3

Les clés secrètes

Les services se configurent par variables d'environnement : noms de bases, utilisateurs, mots de passe. C'est pratique, mais un mot de passe écrit en clair dans un fichier partagé est un mot de passe donné.

Notion 4

Lever et coucher l'application

docker compose up -d
# tout demarre : reseau, conteneurs, dans le bon ordre
docker compose ps
docker compose logs
docker compose stop
# arrete les conteneurs, sans rien supprimer
docker compose down
# supprime conteneurs et reseau, GARDE les repertoires de donnees
rm -rf ./wordpress ./database
# efface AUSSI les donnees : la remise a zero complete

La nuance stop, down, effacement des répertoires est une question d'examen classique... et surtout la différence entre une pause, un rangement et un incendie volontaire.

Notion 5

Le réseau magique (DNS interne)

Le problème
  • Les adresses IP des conteneurs changent à chaque redémarrage.
  • Comment WordPress peut-il trouver la base de données de façon fiable ?
La solution Compose
  • Compose crée un réseau privé exclusif pour la stack.
  • Il inclut un serveur DNS intégré.
  • Le nom du service (ex: basededonnees) devient une adresse valide pour les autres conteneurs.

Dans votre code, n'utilisez jamais d'IP pour parler entre conteneurs. Utilisez simplement le nom du service.

Notion 6

Survivre aux reboots : Restart policies

Par défaut, si le serveur physique redémarre ou si une erreur survient, vos conteneurs restent morts. Il faut demander à Docker de les ressusciter.

services:
web:
image: wordpress
restart: always # Redémarre quoi qu'il arrive
basededonnees:
image: mysql:8.0
restart: unless-stopped # Sauf si on l'a arrêté manuellement
Notion 7

L'ancrage des données : les répertoires partagés

Le problème
  • Un conteneur supprimé emporte tout ce qu'il a écrit.
  • Comment la base de données peut-elle survivre au grand ménage ?
La solution : le montage
  • Syntaxe: ./mondossier:/chemin/conteneur
  • Le conteneur écrit dans un dossier visible sur l'hôte.
  • Les données survivent au down et au prochain up.
  • Un ls suffit pour voir vos données de vos propres yeux.
Notion 8

Construire sur mesure (Build)

Parfois, l'image officielle ne suffit pas. Vous avez écrit votre propre application et son Dockerfile. Compose peut construire l'image pour vous à la volée.

services:
mon_app_maison:
build: . # Cherche le Dockerfile dans le dossier courant
ports:
- 8080:8080