Retour au cours

infra / docker-compose

Introduction à Docker Compose

Leçon 11 exercice

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 run devient vite ingérable
  • Décrire une stack multi-services dans un seul fichier docker-compose.yml dé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'ancienne docker-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 ComposeAvec Docker Compose
Trois commandes docker run à retenir et retaperUn seul fichier docker-compose.yml versionné
Ordre de démarrage à connaître par cœurCompose gère les dépendances entre services
Configuration perdue si le terminal se fermeConfiguration écrite, partagée, relisable
Chaque conteneur nommé et géré manuellementdocker 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.

bash
# 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
yaml
# docker-compose.yml minimal : un seul service nginx
services:
  web:
    image: nginx:1.27-alpine
    ports:
      - "8080:80"
bash
# 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
CommandeEffet
docker compose up -dCrée et démarre les services en arrière-plan
docker compose downSupprime conteneurs + réseaux (pas les volumes nommés)
docker compose down -vSupprime aussi les volumes nommés
docker compose psListe 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) remplace docker-compose (v1).
  • up -d / down / ps / logs -f sont les commandes du quotidien.

Exercices pratiques

1 disponible
1

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.

Résoudre l’exercice →