Docker : les volumes
Les données d’un conteneur sont perdues à sa suppression, sauf si elles sont stockées dans un volume ou un dossier de l’hôte. Les exemples utilisent des noms génériques (pgdata).
Volumes nommés
Section intitulée « Volumes nommés »docker volume create pgdata # crée un volumedocker volume ls # liste les volumesdocker volume inspect pgdata # détail (dont l'emplacement sur l'hôte)docker volume rm pgdata # supprime (aucun conteneur ne doit l'utiliser)docker volume prune # supprime les volumes non utilisésSur Linux, les volumes sont stockés dans /var/lib/docker/volumes/. Les modifier directement n’est pas recommandé.
Monter un volume dans un conteneur
Section intitulée « Monter un volume dans un conteneur »docker run -d --name db -v pgdata:/var/lib/postgresql/data postgres:16docker run -d --name db --mount type=volume,source=pgdata,target=/var/lib/postgresql/data postgres:16-v est la forme courte ; --mount est plus explicite et signale une erreur si le chemin source n’existe pas.
Volume ou bind mount ?
Section intitulée « Volume ou bind mount ? »| Type | Source | Usage |
|---|---|---|
| Volume nommé | géré par Docker (pgdata) |
Données d’application (bases de données), portabilité |
| Bind mount | dossier de l’hôte (/srv/site) |
Fichiers de configuration, code en développement |
| tmpfs | mémoire vive | Données temporaires, jamais écrites sur disque |
docker run -d -v /srv/site:/usr/share/nginx/html:ro nginx:alpine # bind mount en lecture seuledocker run -d --tmpfs /tmp:rw,size=64m monapp:1.0 # tmpfsLe suffixe :ro monte en lecture seule : à privilégier pour la configuration.
Sauvegarder et restaurer un volume
Section intitulée « Sauvegarder et restaurer un volume »Archive du contenu d’un volume, via un conteneur temporaire :
# Sauvegardedocker run --rm \ -v pgdata:/donnees:ro \ -v "$PWD":/sauvegarde \ alpine tar czf /sauvegarde/pgdata.tar.gz -C /donnees .
# Restauration dans un volumedocker run --rm \ -v pgdata:/donnees \ -v "$PWD":/sauvegarde \ alpine tar xzf /sauvegarde/pgdata.tar.gz -C /donneesPour une base de données, arrêter le conteneur avant une sauvegarde de fichiers, ou utiliser l’outil de dump de la base (pg_dump, mysqldump).
Droits sur les fichiers
Section intitulée « Droits sur les fichiers »Les fichiers créés dans un volume appartiennent à l’utilisateur du processus du conteneur. En cas d’erreur permission denied :
- aligner l’utilisateur du conteneur sur le propriétaire des fichiers :
--user 1000:1000; - ou corriger les droits depuis un conteneur temporaire :
docker run --rm -v pgdata:/d alpine chown -R 1000:1000 /d.
Nettoyer
Section intitulée « Nettoyer »docker volume ls -f dangling=true # volumes non utilisésdocker volume prunePour aller plus loin
Section intitulée « Pour aller plus loin »- Documentation officielle : docs.docker.com/engine/storage