Projet · Phase 3.8

Docker (8/9) — Plusieurs conteneurs : Docker Compose

Une vraie application, c'est rarement un seul conteneur. On fait coopérer un site et une base de données, dans un réseau privé, décrit dans un seul fichier.

⏱ ~1 h 30Niveau intermédiairePrérequis : Docker (7/9)Pratique · TP
L’idée reçue

« Une application = un conteneur. »

En réalité, une application réelle est un ensemble de services : un serveur web, une base de données, un cache… Les lancer un par un, à la main, avec les bons ports et réseaux, devient vite ingérable. Docker Compose décrit tout ça dans un seul fichier — et c’est aussi ta première marche vers Kubernetes.

À la fin de ce module, tu sauras…

  • Décrire plusieurs services dans un fichier compose.yaml
  • Lancer et arrêter toute une application d’une seule commande
  • Comprendre le réseau privé automatique entre services
  • Voir en quoi Compose annonce Kubernetes

01Deux services, un fichier

Expérience 1

Décrire SORIA Web + une base de données

Manipule
mkdir ~/soria-stack && cd ~/soria-stack
cat > compose.yaml <<'EOF'
services:
web:
  image: nginx:1.27-alpine
  ports:
    - "8080:80"
db:
  image: postgres:17-alpine
  environment:
    POSTGRES_PASSWORD: exemple
  volumes:
    - db-data:/var/lib/postgresql/data
volumes:
db-data:
EOF
Un seul fichier décrit deux services (web + base), leurs ports, variables et volumes. Rien n’est encore lancé — c’est une description déclarative.
Comprends déclaratif, pas impératif

Au lieu d’enchaîner des commandes docker run (impératif), tu décris l’état voulu : quels services, quelles images, quels réseaux. C’est un changement de paradigme majeur — exactement celui de Kubernetes.

02Tout lancer d’un coup

Expérience 2

Une commande pour toute la pile

Manipule
docker compose up -d
docker compose ps
Observe
NAME               IMAGE                STATUS         PORTS
soria-stack-web-1  nginx:1.27-alpine    Up             0.0.0.0:8080->80/tcp
soria-stack-db-1   postgres:17-alpine   Up
Les deux services démarrent ensemble. docker compose down arrête et supprime tout aussi proprement.
Comprends le cycle de vie d’une pile

compose up -d crée réseaux, volumes et conteneurs déclarés ; compose down défait le tout (en gardant les volumes nommés). Tu gères une application entière comme une unité, plus des conteneurs isolés.

03Le réseau privé automatique

Expérience 3

Les services se parlent par leur nom

Manipule
docker compose exec web ping -c 2 db
Observe
PING db (172.20.0.2): 56 data bytes
64 bytes from 172.20.0.2 ...
Depuis web, on joint db simplement par son nom — sans connaître son IP. Compose a créé un réseau privé et une résolution de noms entre services.
Comprends la découverte de services

Compose place les services d’une même pile dans un réseau privé et leur donne un nom DNS interne (web, db). Une application se connecte à sa base via db:5432, pas une IP en dur. Cette « découverte de services » par nom est exactement ce que fait Kubernetes — en plus grand.

Le pont vers Kubernetes

Garde bien ces trois idées de Compose en tête — tu les retrouveras à la phase Kubernetes, à plus grande échelle :

Idée (Compose)Équivalent (Kubernetes)
décrire l’état voulu (YAML)manifestes déclaratifs
plusieurs services ensembleplusieurs Pods / Deployments
se parler par nom (web → db)Services & DNS interne

Cadrage Compose est parfait pour un serveur. Quand il faudra répartir sur plusieurs machines, gérer la montée en charge et l’auto-réparation, on passera à Kubernetes (Phase 5). Compose reste l’outil idéal pour développer et comprendre — il t’a préparé le terrain.

Ce que tu retiens

Docker Compose décrit une application multi-services dans un fichier YAML déclaratif, la lance d’une commande, et met les services dans un réseau privé où ils se joignent par leur nom. Ces trois idées sont les fondations de Kubernetes.

Mini-projet

La pile SORIA

À faire

  1. Écris un compose.yaml avec ton image SORIA Web (au lieu de nginx brut) + une base Postgres.
  2. Lance la pile, vérifie les deux services avec docker compose ps.
  3. Depuis web, joins db par son nom.
  4. Fais down puis up à nouveau : prouve que les données de la base ont survécu (volume nommé).
  5. Cite les trois idées de Compose que Kubernetes reprend.
Fil rouge — Ta pile tourne. Mais « ça tourne » suffit-il ? Comment savoir qu’un service est vraiment sain ? Au dernier module Docker, on ajoute l’observabilité : logs structurés et healthcheck.

?Auto-évaluation

1. Qu’est-ce qu’un fichier compose « déclaratif » décrit ?

L’état voulu de l’application : les services, leurs images, ports, volumes et réseaux — pas une suite de commandes.

2. Comment deux services d’une même pile se joignent-ils ?

Par leur nom, via le réseau privé et le DNS interne créés par Compose (ex. db:5432), sans IP en dur.

3. Cite une limite de Compose que Kubernetes lève.

Compose gère un seul serveur ; Kubernetes répartit sur plusieurs machines, avec montée en charge et auto-réparation.

Connecte-toi pour enregistrer ta progression.

Suite → Docker (9/9) — Observabilité & santé