Leçon 5 / 8
Leçon 05 · Partie 2 — Aller plus loin

Volumes et réseaux

Le problème de la persistance

Un conteneur est éphémère. Quand tu le supprimes, tout ce qui a été écrit dedans disparaît. Pour une base de données, c'est catastrophique. Les volumes et bind mounts sont la solution.

Bind mounts vs volumes Docker

📁

Bind mount

Monte un dossier de ta machine hôte dans le conteneur. Parfait pour le développement — tu vois les changements en temps réel.

dev · dossier hôte
💾

Volume Docker

Géré par Docker, stocké dans /var/lib/docker/volumes/. Recommandé pour la production. Plus performant et portable.

prod · géré par Docker
Terminal — Volumes
# Créer un volume Docker
docker volume create mes-donnees

# Lister les volumes
docker volume ls

# Utiliser un volume avec -v NOM_VOLUME:CHEMIN_CONTENEUR
docker run -d \
  -v mes-donnees:/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD=secret \
  postgres:16

# Bind mount : monter un dossier local (utile en dev)
docker run -d \
  -v $(pwd)/src:/app/src \
  -p 3000:3000 \
  mon-app:dev

# Inspecter un volume
docker volume inspect mes-donnees

# Supprimer les volumes non utilisés
docker volume prune
✅

Pour les bases de données en production, utilise toujours un volume Docker nommé. Les bind mounts sont pratiques en dev (hot reload), mais moins portables et moins performants sur macOS/Windows.

Les réseaux Docker

Par défaut, les conteneurs sont isolés du réseau hôte et les uns des autres. Docker propose différents drivers réseau :

  • bridge (défaut) — réseau virtuel privé. Les conteneurs sur le même réseau bridge se voient par leur nom.
  • host — partage le réseau de la machine hôte. Meilleures performances, moins d'isolation.
  • none — aucun réseau. Isolation totale.
Terminal — Réseaux
# Créer un réseau personnalisé
docker network create mon-reseau

# Lister les réseaux
docker network ls

# Lancer des conteneurs sur le même réseau
docker run -d --name db --network mon-reseau postgres:16
docker run -d --name app --network mon-reseau -p 3000:3000 mon-app

# "app" peut joindre "db" par son NOM (pas par IP)
# Depuis app : connexion à "db:5432" fonctionne !

# Inspecter un réseau
docker network inspect mon-reseau
💡

Sur un réseau Docker personnalisé (pas le bridge par défaut), les conteneurs peuvent se joindre par leur nom — Docker fait office de DNS interne. db:5432 résout vers l'IP du conteneur nommé "db". C'est magique et très pratique.

// À retenir
  • Les conteneurs sont éphémères — utilise des volumes pour persister les données.
  • Bind mount = dossier hôte monté (dev). Volume Docker = géré par Docker (prod).
  • docker volume create crée un volume. -v nom:/chemin l'utilise au lancement.
  • Réseau bridge par défaut, mais crée un réseau personnalisé pour que les conteneurs se voient par nom.
  • Sur un réseau custom, conteneur1 peut joindre conteneur2:port directement par nom.