Si tu es ici c’est que tu as les bases en Docker sinon tu peux lire ce cours.
Par défaut les conteneurs de Docker sont volatile, à la suppression du conteneur les données du conteneur disparaissent.
Ça c’est si on n’utilise pas de docker volume, justement dans cet article on t’explique comment fonctionnent les volumes docker et comment s’en servir.
Donc comme je le disais, par défaut quand on lance un conteneur comme ceci :
docker run -tid --name debian debian
Aucun volume ne lui est affecté, on peut le voir avec la commande docker inspect :
docker inspect -f {{.Mounts}} debian
[]
Cette commande affiche les volumes associés au conteneur.
Ici on à rien, nada, 0 volumes.
Les commandes docker volume
On va donc voir comment gérer nos volume docker puis comment les affecter à nos conteneurs.
Pour créer notre premier volume :
docker volume create mon_premier_volume
Pour afficher nos volumes :
docker volume create mon_premier_volume
DRIVER VOLUME NAME
local mon_premier_volume
Notre volume « mon_premier_volume » a bien été créé.
Si on souhaite en savoir plus sur notre volume on peut faire un inspect :
docker volume inspect mon_premier_volume
[
{
"CreatedAt": "2021-03-05T20:59:50+01:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/mon_premier_volume/_data",
"Name": "mon_premier_volume",
"Options": {},
"Scope": "local"
}
]
On s’aperçoit ici que notre volume est présent sur notre système hôte dans « /var/lib/docker/volumes/mon_premier_volume/_data« .
Les volumes docker sont toujours placé dans « /var/lib/docker/volumes/« .
Pour supprimer un volume :
docker volume rm nom_de_mon_volume
Pour supprimer tous les volumes qui ne sont pas utilisé :
docker volume prune
Affecter des volumes à nos conteneurs
Lorsque l’on run un conteneur on a 2 possibilités pour lui affecter un volume :
Première méthode, utiliser l’option –mount :
--mount source=le_volume,target=/chemin_dans_le_conteneur
docker run -tid --mount source=mon_premier_volume,target=/etc alpine
Ici j’ai donc crée un conteneur alpine avec le volume « mon_premier_volume » qui est mappé sur /etc du conteneur.
Seconde méthode :
-v nom_du_volume:/chemin_sur_le_conteneur
docker run -tid -v mon_premier_volume:/etc debian
Maintenant si on fait un :
sudo ls /var/lib/docker/volumes/mon_premier_volume/_data
On remarque que le dossier contient bien les fichiers présent dans le /etc du conteneur :
adduser.conf fstab kernel nsswitch.conf rc3.d shells
alternatives gai.conf ld.so.cache opt rc4.d skel
apt group ld.so.conf os-release rc5.d subgid
bash.bashrc group- ld.so.conf.d pam.conf rc6.d subuid
bindresvport.blacklist gshadow libaudit.conf pam.d rcS.d systemd
cron.daily host.conf localtime passwd resolv.conf terminfo
debconf.conf hostname login.defs passwd- rmt timezone
debian_version hosts logrotate.d profile securetty update-motd.d
default init.d machine-id profile.d security xattr.conf
deluser.conf iproute2 mke2fs.conf rc0.d selinux
dpkg issue motd rc1.d shadow
environment issue.net mtab rc2.d shadow-
Tu peux aussi utiliser des volumes en lecture seule avec cette option :
--mount source=nom_du_volume,target=/etc, readonly
Ou :
-v mon_premier_volume:/etc,readonly
Avec cette option le conteneur pourra écrire dans /etc mais les modifications n’affecterons pas le volume.
Enfin voici un option très utile lorsque l’on veut utiliser le même volume qu’un autre conteneur :
--volumes-from nom_conteneur
Avec toutes ces commandes et options tu devrais maintenant savoir utilisé des conteneur avec des volumes structuré.
Si tu veux en savoir plus voici la documentation officielle de docker volume.
Ah oui, voici une petite astuce en plus pour afficher les volumes liés à un conteneur :
docker inspect alpine -f {{.Mounts}}
[{volume monvolume /var/lib/docker/volumes/monvolume/_data /etc local z true }]