Comprendre les volumes

Question

Créez un Dockerfile utilisant l'image de base debian:stretch déclarant un volume

Solution

1
FROM debian:stretch
2
VOLUME /mountPoint

Question

Construisez l'image à l'aide de la commande docker build et nommez la docker-vol

Solution

1
docker build -t docker-vol .

Question

Inspectez l'image construite à l'aide de la commande docker inspect que voyez vous ?

Solution

On voit une partie déclarant un volume

1
docker inspect docker-vol
2
          [
3
              {
4
                  "Id": "sha256:<64 bit hex id>",
5
                  "RepoTags": [
6
                      "docker-vol:latest"
7
                  ],
8
         ... TRUNCATED OUTPUT ...
9
                  "Volumes": {
10
                      "/mountPoint": {}
11
                  },
12
         ... TRUNCATED OUTPUT ...

Question

Lancez un conteneur à partir de notre image docker-vol

Vérifiez la présence du dossier /mountPoint

Solution

1
docker run --rm -it docker-vol
1
root@8d22f73b5b46:/# ls -ld /mountPoint
2
      drwxr-xr-x 2 root root 4096 Jan 18 20:22
3
      /mountPoint

Question

Ajoutez un nouveau fichier dans /mountPoint

Solution

root@8d22f73b5b46:/# echo "Hello API Run" > /mountPoint/hello

Question

Dans un autre shell, inspectez le conteneur et trouvez l'emplacement du volume de données

Solution

1
docker inspect -f '{{json .Mounts}}' <mon-conteneur>
2
[
3
{
4
  "Propagation": "",
5
  "RW": true,
6
  "Mode": "",
7
  "Driver": "local",
8
  "Destination": "/mountPoint",
9
  "Source": "/var/lib/docker/volumes/720e2a2478e70a7cb49ab7385b8be627d4b6ec52e6bb33063e4144355d59592a/_data",
10
  "Name": "720e2a2478e70a7cb49ab7385b8be627d4b6ec52e6bb33063e4144355d59592a"
11
} ]

Ici, le volume de données est mappé sur un répertoire de l'hôte Docker, et le répertoire est monté en mode lecture-écriture. Ce répertoire, également appelé volume, est créé automatiquement par le moteur Docker lors du lancement du conteneur.

Lorsque l'on se déplace à l'emplacement du volume ici /var/lib/docker/volumes/720e2a2478e70a7cb49ab7385b8be627d4b6ec52e6bb33063e4144355d59592a/_data on se rend compte que le dossier contient bien notre fichier hello

1
ls -l /var/lib/docker/volumes/720e2a2478e70a7cb49ab7385b8be627d4b6ec52e6bb33063e4144355d59592a/_data
Remarque

Le résultat aurait été le même si l'on avait utilisé l'option -v lors du lancement d'une image ne contenant pas l'instruction VOLUME

1
docker run -v /mountPoint mon-image-sans-volume

À chaque fois que l'on créé un nouveau conteneur basé sur une image contenant un volume, un nouveau volume va être créé au niveau de l'hôte Docker. Lorsque le conteneur est supprimé, le volume est tout de même conservé.

i l'on souhaite supprimer les volumes associés, il faut utiliser l'option -v lors de l'utilisation de la commande docker rm

1
docker rm -v 8d22f73b5b46