Comment fonctionne le stockage Docker : Volumes vs Bind Mounts
Introduction
Dans ce tutoriel, vous apprendrez comment fonctionne le stockage Docker et comment persister les données en utilisant les volumes Docker et les montages de liaison. Vous comprendrez également les principales différences entre ces approches et quand utiliser chacune d'elles en production. Cela vous aide à éviter la perte de données et à concevoir des systèmes conteneurisés fiables.
Prérequis
- Public cible : Administrateurs système débutants
- Temps estimé : ~30 minutes
- Système d'exploitation : Tout OS avec support Docker tel qu'Ubuntu 22.04+, Debian 12+, CentOS Stream, ou macOS avec Docker Desktop
- Logiciel : Docker 24.0.0 ou version ultérieure
- Permissions : Utilisateur avec accès à Docker ou privilèges sudo
- Matériel : Au moins 2 Go de RAM et 10 Go d'espace disque libre
- Réseau : Accès Internet pour récupérer les images de conteneurs
- Connaissances supposées : Utilisation basique de la ligne de commande et compréhension des conteneurs
Étape 1 : Comprendre le fonctionnement du stockage Docker
Les conteneurs Docker utilisent un système de fichiers en couches. Chaque conteneur a une couche écrivable au-dessus des couches d'image en lecture seule.
Que se passe-t-il lorsqu'un conteneur écrit des données
- Docker stocke les couches d'image en lecture seule
- Lorsque vous démarrez un conteneur, Docker ajoute une couche écrivable
- Toute modification de fichier se produit uniquement dans cette couche écrivable
Résultat
Lorsque vous supprimez un conteneur, toutes les données de la couche écrivable sont perdues. Cela signifie que le stockage des conteneurs est éphémère par défaut.
Ce comportement est utile pour les applications sans état mais pas pour les bases de données ou les services persistants.
Étape 2 : Créer et utiliser des volumes Docker
Les volumes Docker sont des emplacements de stockage gérés créés et maintenus par Docker.
Créer un volume
Exécutez la commande suivante :
docker volume create my_volume
Vous devriez voir le nom du volume retourné.
Utiliser un volume dans un conteneur
Exécutez la commande suivante :
docker run -d -v my_volume:/app/data --name volume_test busybox
Docker monte le volume à l'intérieur du conteneur à /app/data.
Résultat
Les données écrites dans /app/data persistent même si le conteneur est supprimé.
Caractéristiques clés des volumes
- Gérés par Docker
- Stockés dans des répertoires internes Docker tels que
/var/lib/docker/volumes/ - Faciles à sauvegarder et à migrer
- Isolés de la structure du système de fichiers hôte
Utilisez des volumes pour les bases de données et les charges de travail en production.
Étape 3 : Créer et utiliser des montages de liaison
Les montages de liaison lient un répertoire spécifique sur l'hôte à un répertoire à l'intérieur du conteneur.
Utiliser un montage de liaison
Exécutez la commande suivante :
docker run -d -v /home/<YOUR_USERNAME>/data:/app/data --name bind_test busybox
Résultat
Le conteneur accède directement au répertoire de l'hôte. Toute modification dans le répertoire de l'hôte est immédiatement visible à l'intérieur du conteneur.
Caractéristiques clés des montages de liaison
- Dépendent des chemins du système de fichiers hôte
- Permettent l'édition directe de fichiers depuis l'hôte
- Aucune isolation gérée par Docker
- Plus flexibles mais moins portables
Les montages de liaison reflètent immédiatement les changements entre l'hôte et le conteneur.
Étape 4 : Comparer les volumes et les montages de liaison
Comprendre les différences vous aide à choisir la bonne option.
Volumes Docker
- Gérés par Docker
- Portables entre environnements
- Plus sûrs pour une utilisation en production
- Plus faciles à sauvegarder
- Abstraits du système de fichiers hôte
Montages de liaison
- Gérés par l'hôte
- Liés à des chemins de système de fichiers spécifiques
- Utiles pour le développement
- Fournissent un accès direct aux fichiers
- Moins sécurisés si mal configurés
Étape 5 : Choisir entre les volumes et les montages de liaison en production
Utilisez les directives suivantes.
Quand utiliser les volumes Docker
- Exécution de bases de données telles que MySQL ou PostgreSQL
- Stockage de données d'application qui doivent persister
- Déploiement de services en production
- Besoin de portabilité entre serveurs
Quand utiliser les montages de liaison
- Environnements de développement local
- Édition directe de code ou de fichiers de configuration
- Débogage du comportement des conteneurs
- Configurations temporaires ou de test
Important : Les montages de liaison peuvent exposer des fichiers sensibles de l'hôte aux conteneurs s'ils sont mal configurés. Vérifiez toujours les chemins et les permissions.
Vérification et tests
Créez un conteneur de test avec un volume :
docker run -it -v my_volume:/data --name playground busybox
À l'intérieur du conteneur, créez un fichier :
echo test > /data/file.txt
Quittez le conteneur et supprimez-le :
docker rm -f playground
Démarrez un nouveau conteneur avec le même volume :
docker run -it -v my_volume:/data --name playground busybox
Vérifiez le fichier :
cat /data/file.txt
Résultat attendu : Le fichier existe toujours, confirmant la persistance des données.
Revenir en arrière
Pour nettoyer les ressources, exécutez les commandes suivantes :
docker rm -f playground volume_test bind_test
docker volume rm my_volume
docker system prune -f
Important : La suppression des volumes supprime définitivement toutes les données stockées.
Dépannage
- Problème : Les données disparaissent après le redémarrage du conteneur
Cause : Aucun volume ou montage de liaison utilisé
Solution : Attachez un stockage persistant en utilisant des volumes ou des montages de liaison - Problème : Erreurs de permission refusée
Cause : Inadéquation des permissions du répertoire hôte
Solution : Ajustez les permissions en utilisantchmodouchown - Problème : Volume ne se monte pas correctement
Cause : Chemin ou syntaxe incorrecte
Solution : Vérifiez le format de montage et les chemins
Conclusion et prochaines étapes
Vous avez appris comment fonctionne le stockage Docker et comment persister les données en utilisant des volumes et des montages de liaison. Vous comprenez également quand utiliser chaque approche en production. Ensuite, explorez Docker Compose pour gérer des applications multi-conteneurs et définir le stockage de manière plus structurée.