Aller au contenu

Gestion des volumes Docker

docker-volumes
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
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