Les volumes

A la découverte de Docker partie 7

Bind-mount

Après avoir réussi à lancer mes premiers conteneurs, je me suis demandé comment modifier les fichiers de ceux-ci sans devoir me connecter au conteneur. Mon but est de pouvoir modifier les fichiers avec mon éditeur de code favori, et je pense que c’est ce que la plupart des devs vont vouloir faire.

Avec Docker, il est possible de lier un répertoire du conteneur à un répertoire de ma machine, c’est ce qu’on appelle le bind-mount.

Wordpress

Pour l’exemple, je vais lancer un conteneur un peu sexy qui est celui de wordpress, dont je connais la structure des fichiers par coeur.

Un petit rapel sur les options :
-d lance le conteneur en tâche de fond pour ne pas bloquer la console
-p 9001:80 le port 80 du webserver est rendu sur le port 9001 de ma machine
--name wp donne le nom « wp » à mon conteneur afin de le manipuler plus facilement
wordpress c’est le nom de l’image

docker container run -d -p 9001:80 --name wp wordpress

Et donc si je vais sur mon navigateur et que je tape localhost:9001, voici sur quoi je tombe.

Répertoire

Je vais me connecter à ce conteneur pour voir un peu ce qu’il a dans le lard et où sont stockés les fichiers de WordPress.

docker container exec -ti wp bash

Je tombe directement dans le répertoire racine de WordPress, je reconnais très bien la structure des fichiers.

Maintenant, je vais récupérer le path du répertoire dans lequel je me trouve via la commande pwd.

pwd

#Ce qui me donne
/var/www/html

Je sors du conteneur et je crée directement un nouveau dossier. Comme pour le conteneur, je vais également récupérer son chemin complet. De cette manière, j’aurai deux paths, celui du conteneur et celui du dossier que je viens créer sur mon ordinateur.

Path dans le conteneur : /var/www/html
Path du dossier sur mon ordi : /Users/golendercaria/Docker/wordpress

Liaison

Avant d’aller plus loin, je vais supprimer le conteneur WordPress histoire de repartir sur la même commande de run qu’il y a juste au-dessus.

docker container rm -f wp

Maintenant, je vais faire exactement la même chose que pour le mappage de port, c’est-à-dire lier le répertoire que j’ai créé sur ma machine au répertoire du conteneur. Et pour cela, je vais ajouter l’option -v en spécifiant les deux paths, d’abord celui de ma machine et ensuite le path du conteneur, séparés par un deux-points.

docker container run -d -p 9001:80 --name wp -v /Users/golendercaria/Docker/wordpress:/var/www/html wordpress

Si j’ouvre le répertoire qui se trouve ma machine, je retrouve bien les fichiers de base du WordPress.

Persistance des données

Dans Docker, les données ne sont pas persistées. Si tu ouvres un conteneur et que tu fais une modification (en mode exec par exemple), lorsque tu supprimes ce conteneur, tes modifications sont perdues.

En procédant de cette manière, c’est-à-dire avec les volumes, et bien les données sont conservées (elles sont gérées en dehors de l’union filesystem).

Si je modifie certains fichiers ou que j’en crée d’autres, lorsque je détruis mon conteneur et que je le relance avec la même ligne de commande (avec l’option -v quoi), je constate bien que les fichiers du répertoire de l’hôte sont utilisés par le conteneur et qu’ils n’ont pas été écrasés ou supprimés.

27/03/2019

Yann Vangampelaere - nouslesdevs -

Sinon jete un coup d’oeil aux autres catégories

Ma boîte aux lettres

Tu veux me demander quelque chose ?