Dodam własną odpowiedź, ponieważ uważam, że inni nie rozumieją Dockera.
Używanie VOLUME
w pliku Dockerfile jest właściwym sposobem ™, ponieważ dajesz Dockerowi znać, że określony katalog zawiera trwałe dane. Docker utworzy wolumin dla tych danych i nigdy go nie usunie, nawet jeśli usuniesz wszystkie kontenery, które go używają.
Pomija również unijny system plików, dzięki czemu wolumin jest w rzeczywistości katalogiem, który jest montowany (do odczytu i zapisu lub tylko do odczytu) we właściwym miejscu we wszystkich kontenerach, które go współużytkują.
Teraz, aby uzyskać dostęp do tych danych z hosta, wystarczy sprawdzić kontener:
# 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
}
}]
Zwykle robię dowiązania symboliczne w jakimś standardowym miejscu, takim jak / srv , dzięki czemu mogę łatwo uzyskać dostęp do woluminów i zarządzać zawartymi w nich danymi (tylko w przypadku woluminów, na których Ci zależy):
ln -s /var/lib/docker/vfs/dir/b3ef4bc28fb39034dd7a3aab00e086e6... /srv/myapp-www
ln -s /var/lib/docker/vfs/dir/71896ce364ef919592f4e99c6e22ce87... /srv/myapp-log