Devmind.
Menu

Apprendre, à votre rythme

Tous les cursus sont accessibles sans compte.

Chapitre 2 / Notion

Compose : volumes, réseaux, limites

Le compose est le contrat : up -d sur une machine vierge doit tout monter.

◷ 18 minutesTravail sur votre machine

Prérequis (cursus dev) : réseau Docker et volumes, compose, ports.

Pourquoi

Le compose est le contrat : up -d sur une machine vierge doit tout monter. Les trois fautes classiques — volumes partagés dev/prod, base exposée, aucun restart — se paient cash le jour de l'incident.

Concepts

  • Volume nommé : stockage persistant géré par Docker (learn-dev_postgres-data), qui survit au recréation des conteneurs. Le préfixe projet sépare dev et prod.
  • OOM-killer : le tueur du noyau Linux (Out Of Memory) : quand la RAM manque, il sacrifie un processus — parfois la base. Les limites mémoire l'évitent.
  • Healthcheck : test périodique qui déclare le conteneur sain ou non. Avec start_period (délai de grâce au démarrage), on ne juge pas une app lente à démarrer.

Exemple : le contrat complet

services:
  db:
    image: postgres:17-alpine
    restart: unless-stopped
    deploy:
      resources:
        limits: { memory: 512M }
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U monapp"]
      interval: 10s
      start_period: 20s

Réseaux : default interne (app ↔ base, invisible), réseau externe du proxy rejoint uniquement par les conteneurs à exposer. Jamais de ports: sur la base : admin via docker exec -it <db> psql, ou tunnel SSH (ssh -L 5433:localhost:5432 serveur — le -L redirige un port distant vers ton PC, chiffré).

Sauvegarder un volume :

docker run --rm -v monapp_postgres-data:/data -v /backups:/b alpine   tar czf /b/pg-$(date +%F).tgz -C /data .

Cas réel

La dev qui écrit dans la base de prod « parce que c'était plus simple de partager le volume » : un seed de test écrase les vrais utilisateurs. Volumes séparés = incident impossible par construction.

Pièges

  • Le fichier de conf bind-mounté par inode (Caddyfile…) : un outil qui remplace le fichier crée un nouvel inode invisible du conteneur. Toujours écrire en place (cat nouveau > fichier), puis validate + reload.
  • docker-proxy dans ss -tlnp : chaque ports: publié crée un proxy. Un proxy non demandé = un ports: oublié.

À retenir

Compose autonome, volumes séparés par environnement, base cloisonnée, restart + limites + healthcheck partout.

Pas de correction en ligneConfrontez votre code aux résultats attendus du cours.