Comprendre les volumes
Question
Créez un Dockerfile utilisant l'image de base debian:stretch
déclarant un volume
Solution
FROM debian:stretch
VOLUME /mountPoint
Question
Construisez l'image à l'aide de la commande docker build
et nommez la docker-vol
Solution
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
docker inspect docker-vol
[
{
"Id": "sha256:<64 bit hex id>",
"RepoTags": [
"docker-vol:latest"
],
... TRUNCATED OUTPUT ...
"Volumes": {
"/mountPoint": {}
},
... TRUNCATED OUTPUT ...
Question
Lancez un conteneur à partir de notre image docker-vol
Vérifiez la présence du dossier /mountPoint
Solution
docker run --rm -it docker-vol
root@8d22f73b5b46:/# ls -ld /mountPoint
drwxr-xr-x 2 root root 4096 Jan 18 20:22
/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
docker inspect -f '{{json .Mounts}}' <mon-conteneur>
[
{
"Propagation": "",
"RW": true,
"Mode": "",
"Driver": "local",
"Destination": "/mountPoint",
"Source": "/var/lib/docker/volumes/720e2a2478e70a7cb49ab7385b8be627d4b6ec52e6bb33063e4144355d59592a/_data",
"Name": "720e2a2478e70a7cb49ab7385b8be627d4b6ec52e6bb33063e4144355d59592a"
} ]
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
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
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
docker rm -v 8d22f73b5b46