Volumes et persistance des données
Par défaut, les données dans un conteneur sont éphémères. Les volumes et bind mounts permettent de persister les données au-delà du cycle de vie d'un conteneur.
Trois mécanismes de stockage
graph TD
C[Conteneur]
V[Volume Docker
/var/lib/docker/volumes/]
B[Bind Mount
Dossier hôte]
T[tmpfs Mount
RAM uniquement]
C -->|volume| V
C -->|bind| B
C -->|tmpfs| T
Volumes Docker (recommandé en production)
# Créer un volume
docker volume create mes-donnees
# Lister les volumes
docker volume ls
# Inspecter un volume
docker volume inspect mes-donnees
# Utiliser un volume dans un conteneur
docker run -d -v mes-donnees:/var/lib/mysql mysql:8
# Supprimer un volume (données perdues !)
docker volume rm mes-donnees
# Nettoyer les volumes inutilisés
docker volume prune
Avantages : géré par Docker, portable, permissions correctes, sauvegardable.
Bind mounts (développement)
# Monter un dossier local dans le conteneur
# Syntaxe -v : chemin-absolu-hôte:chemin-conteneur
docker run -d -v /home/user/monapp:/app -p 8080:8000 mon-app
# Syntaxe --mount (plus explicite)
docker run -d --mount type=bind,source=/home/user/monapp,target=/app mon-app
Usage typique : développement — les modifications du code local sont immédiatement visibles dans le conteneur sans rebuild.
Cas concret : base de données persistante
# Volume pour les données MySQL
docker volume create mysql-data
# Lancer MySQL avec persistance
docker run -d --name mysql-prod -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=appdb -v mysql-data:/var/lib/mysql -p 3306:3306 mysql:8.0
# Arrêter et relancer → données toujours là
docker stop mysql-prod
docker rm mysql-prod
docker run -d --name mysql-prod -v mysql-data:/var/lib/mysql -p 3306:3306 mysql:8.0
# Les données appdb sont intactes