VOLUMEІнструкція створює обсяг даних в вашому Докер контейнері під час виконання. Каталог, поданий як аргумент, VOLUME- це каталог, який обходить файлову систему Union і використовується в першу чергу для постійних і спільних даних.
Якщо ви запустите docker inspect <your-container>, ви побачите, що в Mountsрозділі є a, Sourceякий представляє розташування каталогу на хості, і a, Destinationщо представляє розташування встановленого каталогу в контейнері. Наприклад,
"Mounts": [
{
"Name": "fac362...80535",
"Source": "/var/lib/docker/volumes/fac362...80535/_data",
"Destination": "/webapp",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
Ось 3 випадки використання для docker run -v:
docker run -v /data: Це аналогічно встановленню VOLUMEінструкції у вашому Dockerfile.
docker run -v $host_path:$container_path: Це дозволяє вам підключити $host_pathз вашого хоста до $container_pathвашого контейнера під час виконання. У розробці це корисно для обміну вихідним кодом вашого хоста з контейнером. У виробництві це можна використовувати для монтажу /etc/resolv.confв контейнер таких речей, як інформація про DNS хоста (знайдена в ) або секрети. І навпаки, ви також можете використовувати цю техніку для запису журналів контейнера в конкретні папки на хості. І те, $host_pathі інше $container_pathповинні бути абсолютними шляхами.
docker run -v my_volume:$container_path: Це створює об'єм даних у вашому контейнері $container_pathта називає його my_volume. Це по суті те саме, що створювати та називати томи за допомогоюdocker volume create my_volume . Іменування такого тома корисно для об'єму даних контейнера та об'єму спільного зберігання, використовуючи драйвер для зберігання з кількома хостами, як Flocker .
Зауважте, що підхід монтажу хостової папки як обсягу даних недоступний у Dockerfile. Щоб процитувати документацію докера ,
Примітка. Це недоступно в Dockerfile через його переносимість та спільне використання. Оскільки каталог хостів за своєю природою залежить від хоста, каталог хостів, зазначений у Dockerfile, ймовірно, не буде працювати на всіх хостах.
Тепер, якщо ви хочете скопіювати свої файли в контейнери в середовищах, що не розробляються, ви можете скористатися інструкціями ADDабо COPYвказівками у своєму Dockerfile. Це те, що я зазвичай використовую для розгортання без розробки.
COPYщобADD. Вони майже однакові, алеADDмають деякі додаткові URL-адреси wrt та архівні файли, що може дивувати.