Comprendre les Volumes Docker
Les conteneurs Docker sont éphémères par conception. Lorsqu’un conteneur est arrêté et supprimé, toutes les données écrites dans le système de fichiers du conteneur sont perdues. La plupart des applications réelles ont besoin de données persistantes.
Docker fournit trois mécanismes de persistance :
- Volumes Nommés : Gérés par Docker, stockés dans
/var/lib/docker/volumes/. - Bind Mounts : Mappent un répertoire spécifique de l’hôte dans le conteneur.
- Montages tmpfs : Stockage en mémoire éliminé à l’arrêt du conteneur.
Prérequis
- Docker Engine 20.10+ installé.
- Accès shell à l’hôte Docker.
- Familiarité de base avec les commandes CLI Docker.
Problèmes Courants de Volumes Docker
1. Perte de Données au Redémarrage
docker volume create myapp-data
docker run -d --name postgres-db \
-v myapp-data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=secret postgres:16
Critique :
docker-compose down -vsupprimera tous les volumes.
2. Erreurs de Permission Refusée
docker exec mycontainer id
ls -lan /chemin/vers/repertoire/hote
docker exec mycontainer ls -lan /data
docker run -d -v myvolume:/data myimage
docker run -d --user "$(id -u):$(id -g)" -v ./data:/data myimage
3. Bind Mount Affiche un Répertoire Vide
Les bind mounts remplacent le système de fichiers du conteneur. Utilisez des volumes nommés qui préservent le contenu de l’image.
4. Volumes Orphelins Consommant de l’Espace Disque
docker volume ls -f dangling=true
docker system df
docker volume prune
5. Synchronisation sur macOS/Windows
- Utilisez VirtioFS (Docker Desktop 4.15+).
- Utilisez des volumes nommés pour les grands ensembles de données.
Prévention et Meilleures Pratiques
- Utilisez toujours des volumes nommés pour les bases de données.
- N’utilisez jamais
docker-compose down -ven production. - Sauvegardez les volumes régulièrement.
- Configurez les montages en lecture seule avec le suffixe
:ro.
Résumé
- Les conteneurs Docker sont éphémères — utilisez toujours des volumes pour les données persistantes.
- Les erreurs de permission proviennent d’incompatibilités d’UID.
- Les volumes nommés sont préférés en production.
- Nettoyez les volumes orphelins avec
docker volume prune.