Gestion des volumes Docker
Afin de gérer au mieux les conteneurs en stack docker-compose, il est important de comprendre le fonctionnement des volumes docker afin d’avoir un stockage persistant et ainsi éviter les pertes de données.
I. Exemple de volume partagé
Ici, nous voulons créer un conteneur ubuntu basique, et lui créer un volume afin de pouvoir lui partager des fichiers se trouvant sur notre hôte.
1. Créer un dossier ubuntu et un fichier docker-compose.yml à l’intérieur
mkdir ubuntu
nano docker-compose.yml
2. Editer le fichier docker-compose.yml et y coller la configuration suivante
version: '3'
services:
my_ubuntu:
image: celtak/ubuntu-ping-ip
container_name: celtak_ubuntu
stdin_open: true
tty: true
volumes:
- ./data:/jesuisdata
(I) Info
Le data à gauche est le point de montage de votre hôte, tandis que le dossier jesuisdata est le point de montage de votre conteneur. Pour information, si vous mettez un point devant le point de montage de votre hôte le dossier qui contiendra le volume se trouvera dans le dossier ou vous avez votre docker-compose.yml, si vous ne mettez pas de point le point de montage se fait à la racine de votre machine hôte.
Avec cette configuration, nous obtenons le resultat suivant, c’est à dire un dossier data dans le dossier qui contient le docker-compose.yml :
cd ubuntu
ls
data docker-compose.yml
Essayons de créer un fichier dans le dossier data
cd data
touch jesuisunfichier
Il faut ensuite se connecter au terminal de notre conteneur, pour se faire il faut d’abord connaître le nom du conteneur ou bien son ID étant donné qu’il est généré aléatoirement lors de la création de celui -ci.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
bfe516e5056b celtak/ubuntu-ping-ip "bash" 8 minutes ago Up 8 minutes
docker exec -ti ff97cceb7d4b bash
Une fois connecté au terminal du conteneur, vous pouvez lister les fichiers avec ls
root@bfe516e5056b:/# ls
bin dev home lib media opt root sbin sys usr
boot etc jesuisdata lib64 mnt proc run srv tmp var
Si on va dans le dossier jesuisdata :
root@bfe516e5056b:/jesuisdata# ls
jesuisunfichier
II. Exemple de volume managé
Nous allons utiliser exactement le même principe que pour l’exemple précédent, nous allons créer un stack ubuntu basique, mais ici la différence se fera dans la manière ou l’on créé et connecte le volume.
1. Arrêter et supprimer le conteneur que nous avons créé précédemment :
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
ff97cckf9d4b celtak/ubuntu-ping-ip "bash" 8 minutes ago Up 8 minutes
docker stop ff97cckf9d4b
docker rm ff97cckf9d4b
2. Editer le fichier docker-compose.yml et y coller la configuration suivante
version: '3'
services:
my_ubuntu:
image: celtak/ubuntu-ping-ip
container_name: celtak_ubuntu
stdin_open: true
tty: true
volumes:
- ubuntu-volume:/undossier
volumes:
ubuntu-volume:
Ici, nous avons créé un volume qui se nomme ubuntu-volume, il est stocké par défaut sur notre hôté à /var/lib/docker/volumes/ubuntu_ubuntu_volume
Nous pouvons vérifier que le volume est bien lié à notre conteneur ubuntu en créant un fichier dans le dossier ubuntu_ubuntu_volume :
cd /var/lib/docker/volumes/ubuntu_ubuntu_volume
touch unfichier
Il faut ensuite se connecter au terminal de notre conteneur, pour se faire il faut d’abord connaître le nom du conteneur ou bien son ID étant donné qu’il est généré aléatoirement lors de la création de celui -ci.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
ff97cceb7d4b celtak/ubuntu-ping-ip "bash" 8 minutes ago Up 8 minutes
docker exec -ti ff97cceb7d4b bash
Une fois connecté au terminal du conteneur, vous pouvez lister les fichiers avec ls
root@ff97cceb7d4b:/# ls
bin dev home lib64 mnt proc run srv tmp usr
boot etc lib media opt root sbin sys undossier var
On peut constater qu’un dossier nommé undossier est présent sur la machine, si on regarde dedans on peut également constater que le fichier que nous avons précédemment créé est bien à l’intérieur
root@ff97cceb7d4b:/# ls undossier/
unfichier
III. Vérifications
Nous pouvons vérifier les volumes docker avec la commande suivante :
docker volume ls
DRIVER VOLUME NAME
local ubuntu_ubuntu-volume