VOLUME
Инструкция создает объем данных в вашем Докер контейнере во время выполнения. Каталог, указанный в качестве аргумента, VOLUME
является каталогом, который обходит файловую систему Union и в основном используется для постоянных и общих данных.
Если вы запустите docker inspect <your-container>
, вы увидите, что в Mounts
разделе есть значок, Source
который представляет расположение каталога на хосте, и значок, 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
вашему контейнеру во время выполнения. При разработке это полезно для совместного использования исходного кода на вашем хосте с контейнером. В производстве это можно использовать для монтирования таких вещей, как информация DNS хоста (находится в /etc/resolv.conf
) или секреты в контейнер. И наоборот, вы также можете использовать этот метод для записи журналов контейнера в определенные папки на хосте. Оба $host_path
и $container_path
должны быть абсолютными путями.
docker run -v my_volume:$container_path
: Это создает том данных в вашем контейнере $container_path
и дает ему имя my_volume
. По сути, это то же самое, что создание и присвоение имени тому using docker volume create my_volume
. Такое присвоение имени тому полезно для тома данных контейнера и тома общего хранилища с использованием драйвера хранилища с несколькими хостами, такого как Flocker .
Обратите внимание, что способ подключения папки хоста в качестве тома данных недоступен в Dockerfile. Чтобы процитировать документацию докера ,
Примечание: это недоступно из файла Dockerfile из-за его переносимости и совместного использования. Поскольку каталог хоста по своей природе зависит от хоста, каталог хоста, указанный в Dockerfile, вероятно, не будет работать на всех хостах.
Теперь, если вы хотите скопировать свои файлы в контейнеры в среде, не связанной с разработкой, вы можете использовать инструкции ADD
или COPY
в своем файле Dockerfile. Это то, что я обычно использую для развертывания, не связанного с разработкой.
COPY
чтобыADD
. Они почти одинаковы, ноADD
имеют некоторые дополнительные возможности по отношению к URL-адресам и файлам архивов, что может удивить.