Skip to Content
🎉 Utilisez JS efficacement →
DockerRéseaux & stockage🗃️ Cas Pratique : Stockage Docker

🗃️ Cas Pratique : Stockage Docker

Dans ce cas pratique, nous allons explorer comment Docker gère le stockage persistant en utilisant deux techniques courantes : les volumes Docker et les bind mounts. Nous allons créer un conteneur qui persiste ses données, même après son arrêt ou sa suppression.

🎯 Objectif

  1. Utiliser un volume Docker pour persister les données d’un conteneur.
  2. Utiliser un bind mount pour partager des fichiers entre l’hôte et le conteneur.
  3. Vérifier la persistance des données après la suppression du conteneur.

🌐 Utiliser un Volume Docker

Les volumes Docker sont gérés par Docker lui-même et sont stockés dans un répertoire dédié sur l’hôte. Ils permettent de persister des données de manière simple et efficace, tout en étant indépendants du cycle de vie des conteneurs.

Avant de commencer, vous pouvez créer explicitement le volume (optionnel) :

docker volume create mysql-data

Nous allons commencer par lancer un conteneur MySQL en utilisant un volume Docker pour persister les données :

docker run -d \ --name mysql-volume \ -e MYSQL_ROOT_PASSWORD=rootpassword \ -v mysql-data:/var/lib/mysql \ mysql:latest

Explications :

  • -d : Exécute le conteneur en mode détaché.
  • --name mysql-volume : Donne un nom au conteneur (facilite les interactions).
  • -e MYSQL_ROOT_PASSWORD=rootpassword : Définit une variable d’environnement pour le mot de passe root.
  • -v mysql-data:/var/lib/mysql : Monte un volume nommé mysql-data dans le répertoire /var/lib/mysql, où MySQL stocke ses données.

Docker va créer automatiquement le volume mysql-data. Pour vérifier que le volume a été créé, exécutez la commande suivante :

docker volume ls

Vous devriez voir mysql-data dans la liste des volumes.

🔄 Vérifier la Persistance des Données avec le Volume

Nous allons maintenant arrêter et supprimer le conteneur MySQL, puis le relancer pour vérifier que les données sont bien persistées.

  1. Arrêter et supprimer le conteneur :
docker stop mysql-volume docker rm mysql-volume
  1. Relancer un conteneur avec le même volume :
docker run -d \ --name mysql-volume \ -e MYSQL_ROOT_PASSWORD=rootpassword \ -v mysql-data:/var/lib/mysql \ mysql:latest

Le conteneur MySQL va redémarrer en utilisant les mêmes données que précédemment, prouvant que le volume a bien persisté les informations de la base de données.

📂 Utiliser un Bind Mount

Un bind mount permet de lier un répertoire spécifique de la machine hôte à un répertoire du conteneur. Cela peut être utile pour partager des fichiers de configuration, du code source ou d’autres données entre l’hôte et le conteneur.

Nous allons maintenant monter un répertoire de notre machine locale dans un conteneur Nginx.

  1. Créer un fichier sur la machine hôte :

Créez un répertoire sur votre machine hôte contenant une page HTML simple.

mkdir ~/nginx-html echo "<h1>Hello from Docker Bind Mount</h1>" > ~/nginx-html/index.html
  1. Lancer un conteneur Nginx avec un bind mount :
docker run -d \ --name nginx-bind \ -p 8080:80 \ -v ~/nginx-html:/usr/share/nginx/html \ nginx

Explications :

  • -p 8080:80 : Redirige le port 8080 de la machine hôte vers le port 80 du conteneur.
  • -v ~/nginx-html:/usr/share/nginx/html : Lie le répertoire local ~/nginx-html au répertoire où Nginx sert les fichiers HTML dans le conteneur (/usr/share/nginx/html).
  1. Accéder à la page web :

Ouvrez votre navigateur et accédez à http://localhost:8080. Vous devriez voir la page HTML que vous avez créée sur votre machine hôte, prouvant que le bind mount fonctionne.

🔄 Vérifier le Fonctionnement du Bind Mount

Modifiez le fichier index.html sur votre machine locale :

echo "<h1>Updated from Host</h1>" > ~/nginx-html/index.html

Rafraîchissez votre navigateur. Vous verrez immédiatement la mise à jour, car le conteneur utilise directement le fichier stocké sur votre machine.

🧹 Nettoyage

docker rm mysql-volume nginx-bind docker volume rm mysql-data

Une fois terminé, vous pouvez arrêter et supprimer les conteneurs et volumes avec ces commandes :

docker stop mysql-volume nginx-bind docker rm mysql-volume nginx-bind docker volume rm mysql-data

Vous pouvez également supprimer le dossier local utilisé pour le bind mount si vous n’en avez plus besoin :

rm -rf ~/nginx-html

🎓 Conclusion

Dans ce cas pratique, nous avons exploré deux mécanismes de stockage Docker : les volumes, qui permettent de garantir la persistance des données indépendamment du cycle de vie des conteneurs, et les bind mounts, qui facilitent le partage direct de fichiers entre l’hôte et les conteneurs. Ces techniques sont essentielles pour développer des applications nécessitant la persistance des données et l’intégration continue avec les systèmes de fichiers locaux.

mis à jour le