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-адресам и файлам архивов, что может удивить.