infra / docker-compose
Introduction à Docker Compose
Explication
Un peu d'histoire
Docker est lancé par Solomon Hykes chez dotCloud en mars 2013. L'outil qui deviendra Docker Compose est créé peu après, en 2014, sous le nom de "Fig" par une petite équipe (Orchard Laboratories), avant d'être racheté et intégré officiellement par Docker Inc. Le besoin était simple : dès qu'une application est composée de plusieurs conteneurs (une API, une base de données, un cache Redis...), les lancer un par un à la main devient vite ingérable.
Pourquoi apprendre Docker Compose aujourd'hui
Docker Compose est devenu l'outil standard pour développer en local des applications multi-services de façon reproductible : un seul fichier YAML décrit toute la stack, et une seule commande la démarre. C'est une étape quasi obligatoire avant même de parler d'orchestration en production avec Kubernetes, et c'est utilisé par la grande majorité des équipes qui travaillent avec Docker au quotidien.
Ce que vous allez apprendre
- Comprendre pourquoi lancer plusieurs conteneurs à la main avec
docker rundevient vite ingérable - Décrire une stack multi-services dans un seul fichier
docker-compose.ymldéclaratif - Démarrer, arrêter et inspecter une stack complète avec
docker compose up/down/ps - Distinguer la commande moderne
docker compose(v2) de l'anciennedocker-compose(v1, dépréciée) - Comprendre ce que fait réellement Compose en coulisse quand il lit ton fichier YAML
Dans quel contexte ?
Imagine une équipe qui développe une API Node.js branchée sur une base PostgreSQL et un cache Redis. Sans Compose, chaque nouveau développeur qui clone le dépôt technologik-api doit deviner, souvent via un README vite obsolète, les trois commandes docker run à taper dans le bon ordre avec les bonnes options. Avec un fichier docker-compose.yml versionné dans le dépôt, cette même personne tape une seule commande, docker compose up -d, et obtient exactement la même stack que le reste de l'équipe.
Le problème, très concrètement
Imagine une application avec une API, une base Postgres et un cache Redis. Sans Compose, il faut taper trois commandes docker run différentes, avec les bons paramètres, dans le bon ordre. C'est long, source d'erreurs, et personne d'autre dans l'équipe ne connaît cette suite de commandes par cœur.
Une première idée simple : tout décrire dans un fichier
Docker Compose part d'un principe simple : au lieu de taper des commandes, on ÉCRIT ce qu'on veut dans un fichier YAML. Ce fichier liste les services (l'API, la base, le cache), avec pour chacun l'image à utiliser et les ports à ouvrir. Une fois ce fichier prêt, une seule commande, docker compose up, démarre tout d'un coup.
Ce que Compose fait vraiment en coulisse
D'abord, Compose lit le fichier YAML et comprend ce que tu veux : quels services, avec quelle image, sur quels ports. Ensuite, il regarde ce qui tourne déjà sur ta machine. Enfin, il crée seulement ce qui manque, et laisse tranquille ce qui est déjà correct.
| Sans Docker Compose | Avec Docker Compose |
|---|---|
Trois commandes docker run à retenir et retaper | Un seul fichier docker-compose.yml versionné |
| Ordre de démarrage à connaître par cœur | Compose gère les dépendances entre services |
| Configuration perdue si le terminal se ferme | Configuration écrite, partagée, relisable |
| Chaque conteneur nommé et géré manuellement | docker compose down arrête tout le projet d'un coup |
Prérequis
Cette leçon suppose que tu sais déjà lancer un conteneur isolé avec docker run et comprendre la différence entre une image et un conteneur. Si ce n'est pas encore le cas, mieux vaut d'abord voir les bases de Docker avant Compose.
Le fichier devient la mémoire du projet
Une fois ce mécanisme compris, l'avantage devient clair : le fichier YAML est versionné avec le code, dans Git. N'importe qui dans l'équipe peut cloner le projet et relancer exactement la même stack, avec les mêmes versions, sans rien reconfigurer.
Tout regrouper sous un même projet
Maintenant que tu sais que Compose crée des conteneurs, sache qu'il les regroupe aussi sous un "projet" nommé d'après le dossier par défaut. Cela permet de tout arrêter, lister ou supprimer d'un coup, comme un seul bloc cohérent.
Les pièges à connaître avant de continuer
Il existe deux commandes qui se ressemblent : docker-compose (l'ancienne version, en Python, obsolète) et docker compose (la version actuelle, intégrée au CLI Docker). Ce cours utilise uniquement la seconde. Autre piège fréquent : oublier docker compose down en fin de session, ce qui laisse tourner des conteneurs inutiles en arrière-plan. Attention aussi, down seul ne supprime jamais les volumes de données : il faut ajouter explicitement l'option -v pour cela.
Piège fréquent
Taper docker-compose up (avec un tiret) sur une machine récente peut échouer avec un message "command not found", car cet outil Python v1 n'est plus installé par défaut. Le réflexe à prendre dès cette première leçon : toujours écrire docker compose (sans tiret, deux mots), la commande intégrée au CLI Docker moderne.
Cette leçon pose juste les bases. La suivante va détailler, étape par étape, comment est construit un vrai fichier docker-compose.yml.
Commandes & code
Introduction à Docker Compose
Docker Compose permet de décrire et lancer plusieurs conteneurs liés entre eux avec un seul fichier YAML.
# Vérifier que Docker et Compose sont installés
docker --version
docker compose version
# Docker Compose v2 est intégré au CLI Docker (commande "docker compose", sans tiret)
# L'ancienne commande "docker-compose" (v1, Python) est dépréciée# docker-compose.yml minimal : un seul service nginx
services:
web:
image: nginx:1.27-alpine
ports:
- "8080:80"# Lancer la stack en arrière-plan
docker compose up -d
# Voir les conteneurs gérés par ce projet
docker compose ps
# Suivre les logs en temps réel
docker compose logs -f
# Arrêter et supprimer les conteneurs, réseaux créés
docker compose down
# Arrêter sans supprimer (garde les conteneurs pour un futur "start")
docker compose stop| Commande | Effet |
|---|---|
docker compose up -d | Crée et démarre les services en arrière-plan |
docker compose down | Supprime conteneurs + réseaux (pas les volumes nommés) |
docker compose down -v | Supprime aussi les volumes nommés |
docker compose ps | Liste les conteneurs du projet |
docker compose logs -f <service> | Logs en direct d'un service |
docker compose restart <service> | Redémarre un service précis |
Résumé
- Compose = un YAML déclaratif pour plusieurs conteneurs.
docker compose(v2) remplacedocker-compose(v1).up -d/down/ps/logs -fsont les commandes du quotidien.
Exercices pratiques
Mission : onboarder un nouveau développeur sur boutique-api
Objectif : Diagnostiquer un onboarding raté sur une stack Compose et corriger les commandes utilisées.
Contexte
Un nouveau développeur clone le dépôt boutique-api. Le README, jamais mis à jour, lui dit de taper docker-compose up : il obtient une erreur "command not found". Une fois la stack lancée, un collègue lui affirme qu'un simple docker compose down suffit toujours à repartir d'une base de données totalement vide.
Réponds aux questions et propose les bonnes commandes, sans copier une réponse toute faite.