Permettez-moi d'ajouter ma propre réponse, car je pense que les autres manquent le point de Docker.
L'utilisation VOLUME
dans Dockerfile est la bonne façon ™, car vous faites savoir à Docker qu'un certain répertoire contient des données permanentes. Docker créera un volume pour ces données et ne le supprimera jamais, même si vous supprimez tous les conteneurs qui l'utilisent.
Il contourne également le système de fichiers union, de sorte que le volume est en fait un répertoire réel qui est monté (en lecture-écriture ou en lecture seule) au bon endroit dans tous les conteneurs qui le partagent.
Désormais, pour accéder à ces données depuis l'hôte, il vous suffit d'inspecter votre conteneur:
# docker inspect myapp
[{
.
.
.
"Volumes": {
"/var/www": "/var/lib/docker/vfs/dir/b3ef4bc28fb39034dd7a3aab00e086e6...",
"/var/cache/nginx": "/var/lib/docker/vfs/dir/62499e6b31cb3f7f59bf00d8a16b48d2...",
"/var/log/nginx": "/var/lib/docker/vfs/dir/71896ce364ef919592f4e99c6e22ce87..."
},
"VolumesRW": {
"/var/www": false,
"/var/cache/nginx": true,
"/var/log/nginx": true
}
}]
Ce que je fais habituellement, c'est créer des liens symboliques dans un endroit standard tel que / srv , afin que je puisse facilement accéder aux volumes et gérer les données qu'ils contiennent (uniquement pour les volumes qui vous intéressent):
ln -s /var/lib/docker/vfs/dir/b3ef4bc28fb39034dd7a3aab00e086e6... /srv/myapp-www
ln -s /var/lib/docker/vfs/dir/71896ce364ef919592f4e99c6e22ce87... /srv/myapp-log