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 · ComposeLes 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.
- Les musiciens changent, la partition reste : c'est elle, le vrai capital.
- Objectif du jour : décrire l'application au lieu de la commander.
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.
On ne dit plus comment faire, étape par étape : on décrit l'état voulu, et Compose s'arrange pour y arriver.
La recette est un fichier texte : on la versionne, on la partage, on la relit. L'installation redevient une connaissance écrite.
🖼️ Anatomie d'un docker-compose.yml
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.
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é.
- Le fichier .env garde les secrets à part : la partition reste publiable, les clés restent privées.
- Règle du cours : jamais de vrai mot de passe dans un fichier docker-compose.yml remis ou versionné.
Lever et coucher l'application
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.
Le réseau magique (DNS interne)
- Les adresses IP des conteneurs changent à chaque redémarrage.
- Comment WordPress peut-il trouver la base de données de façon fiable ?
- 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.
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.
- C'est la clé de la tranquillité d'esprit en production.
L'ancrage des données : les répertoires partagés
- Un conteneur supprimé emporte tout ce qu'il a écrit.
- Comment la base de données peut-elle survivre au grand ménage ?
- Syntaxe:
./mondossier:/chemin/conteneur - Le conteneur écrit dans un dossier visible sur l'hôte.
- Les données survivent au
downet au prochainup. - Un
lssuffit pour voir vos données de vos propres yeux.
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.
- Lors du premier
docker compose up -d, l'image sera compilée. - Si vous modifiez le code, forcez la reconstruction :
docker compose up -d --build