Дозвольте додати свою власну відповідь, тому що я вважаю, що інші бракують точки Докера.
Використання VOLUME
в Dockerfile - це правильний шлях ™, тому що ви повідомляєте Докер про те, що певний каталог містить постійні дані. Docker створить об'єм для цих даних і ніколи не видаляє їх, навіть якщо ви видалите всі контейнери, які ними користуються.
Він також обходить файлову систему об'єднання, так що том насправді є фактичним каталогом, який встановлюється (читати-записувати чи читати лише) у потрібному місці у всіх контейнерах, які їм діляться.
Тепер, щоб отримати доступ до цих даних від хоста, вам потрібно лише перевірити ваш контейнер:
# 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
}
}]
Зазвичай я робимо символьні посилання в стандартному місці, наприклад / srv , щоб я міг легко отримувати доступ до томів і керувати даними, які вони містять (лише для томів, які вам цікаві):
ln -s /var/lib/docker/vfs/dir/b3ef4bc28fb39034dd7a3aab00e086e6... /srv/myapp-www
ln -s /var/lib/docker/vfs/dir/71896ce364ef919592f4e99c6e22ce87... /srv/myapp-log