đïž 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
- Utiliser un volume Docker pour persister les donnĂ©es dâun conteneur.
- Utiliser un bind mount pour partager des fichiers entre lâhĂŽte et le conteneur.
- 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.
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.
- ArrĂȘter et supprimer le conteneur :
docker stop mysql-volume
docker rm mysql-volume
- 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.
- 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
- 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
).
- 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
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
đ 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.