Позвольте мне добавить свой собственный ответ, потому что я считаю, что другие упускают смысл Докера.
Использование VOLUME
в Dockerfile — это правильный путь™, потому что вы сообщаете Docker, что определенный каталог содержит постоянные данные. 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
person
Tobia
schedule
01.04.2015