Compose : volumes, réseaux, limites
Le compose est le contrat : up -d sur une machine vierge doit tout monter.
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), puisvalidate+reload. docker-proxydansss -tlnp: chaqueports:publié crée un proxy. Un proxy non demandé = unports:oublié.
À retenir
Compose autonome, volumes séparés par environnement, base cloisonnée, restart + limites + healthcheck partout.