{{tag>docker sysadmin volumes}}
====== Docker: Gestion des volumes ======
===== bind mount =====
===== Montage d'un sous répertoire dans un volume nommé =====
Il n'est pas possible de monter directement un sous répertoire présent sur un volume nommé cependant on peut obtenir un résultat équivalent en utilisant les liens symboliques.
Pour l'exemple on souhaite partager un volume nommé entre plusieurs services sauvegarder les données produites par une base de données MySQL dans un volume nommé partager
# In the Dockerfile:
RUN mkdir -p /data/subdir
RUN ln -s /data/subdir /var/www/subdir
===== Exporter/transférer un volume =====
Pour exporter un volume et le transférer vers un autre hôte ici via ssh:
docker run --rm -v datavol:/data:ro busybox:latest tar -C /data -cf- . | ssh server.fqdn docker run --rm -i -v datavol:/data busybox:latest tar -C /data -xf-
Pour créer une archive sur le système de fichier local
docker container run --rm --interactive --tty --volume $(pwd)/backup:/mnt/backup --volume datavol:/mnt/datavol:ro busybox:latest /bin/tar -cvzf /mnt/backup/backup_volume.tar /mnt/datavol
source : https://stackoverflow.com/questions/68229758/export-docker-volume-to-another-machine
===== Analyse et inspection des volumes =====
Pour avoir une vue globale de l'espace disque utilisé par **Docker**, il existe la commande **docker system df**:
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 21 5 7.217GB 6.723GB (93%)
Containers 5 5 191.2kB 0B (0%)
Local Volumes 10 3 784.1MB 634.1MB (80%)
Build Cache 0 0 0B 0B
Dans l'exemple ci-dessus on peut rapidement évaluer la partie occupée par les volumes grâce au résumé exprimé en pourcentage.
Utiliser l'option **-v** ou **%%--verbose%%** pour obtenir une réponse plus exhaustive avec le détail par volume:
docker system df -v
Images space usage:
. . .
Local Volumes space usage:
VOLUME NAME LINKS SIZE
redmine_redmine_db 1 53.39MB
ffsync_data 0 61.44kB
mqtt_mosquitto_data 1 3.481kB
mqtt_mosquitto_log 1 0B
prometheus_data 1 220.8MB
Pour déterminer quel répertoire est utilisé localement pour sauvegarder les données di volume, utiliser la commande **docker volume inspect**:
docker volume inspect dokuwiki_phobos_databank
[
{
"CreatedAt": "2021-02-03T00:26:42+01:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/dokuwiki_phobos_databank/_data",
"Name": "dokuwiki_phobos_databank",
"Options": {},
"Scope": "local"
}
]
La valeur de ''Mountpoint'' permet d'identifier le répertoire associé au volume. Un outil tel que **ncdu** permettra alors rapidement d'évaluer quelle partie de l'arborescence consomme de l'espace disque:
# Analyse interactive en console via ncdu
ncdu /var/lib/docker/volumes/dokuwiki_phobos_databank/_data
===== Références =====
* https://devops4solutions.com/docker-volumes-how-to-manage-data-in-docker/
* https://stackoverflow.com/questions/38164939/can-we-mount-sub-directories-of-a-named-volume-in-docker
* https://docs.docker.com/storage/bind-mounts/
* https://www.toolsqa.com/docker/docker-volume/
* https://medium.com/homullus/how-to-inspect-volumes-size-in-docker-de1068d57f6b