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.