Table des matières

, ,

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