Подтвердить что ты не робот

Dockerfile: понимание инструкции VOLUME

Возьмем пример.

Ниже приведена команда VOLUME для изображения nginx:

VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]

Вот мои вопросы:

  • Когда вы запускаете контейнер, будут ли эти каталоги отображаться на моем хосте? И когда я остановлю свой контейнер, каталоги останутся?

  • Если некоторые (или все) из этих каталогов уже существуют в моем хосте, что произойдет? Например, предположим, что изображение поставляется с конфигурационным файлом по умолчанию в каталоге /etc/nginx контейнера, и у меня также есть файл конфигурации внутри /etc/nginx на моем хосте. Когда контейнер запускается, какой из этих файлов получит приоритет?

  • Какое ключевое различие между -v /host/dir:container/dir и VOLUME?

Литература:

4b9b3361

Ответ 1

Объемы контейнера - это просто каталоги на хосте, независимо от того, какой метод они создают. Если вы не укажете каталог на хосте, Docker создаст новый каталог для тома, обычно под /var/lib/docker/vfs.

Однако том был создан, легко найти, где он находится на хосте, используя команду docker inspect, например:

$ ID=$(docker run -d -v /data debian echo "Data container")
$ docker inspect -f {{.Mounts}} $ID
[{0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951 /var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data /data local  true }]

Мы видим, что Docker создал каталог для тома в /var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data.

Вы можете изменять/добавлять/удалять файлы в этом каталоге с хоста, но обратите внимание, что для разрешений вам может понадобиться sudo.

Docker будет удалять только каталоги томов в двух случаях:

  • Если опция --rm указана на docker run, все тома будут удалены, когда контейнер выйдет из
  • Если контейнер удален с помощью docker rm -v CONTAINER, все тома будут удалены.

В обоих случаях тома будут удаляться только в том случае, если к ним не относятся другие контейнеры. Объемы, сопоставленные определенным каталогам хоста (синтаксис -v HOST_DIR:CON_DIR), никогда не удаляются Docker. Однако, если вы удалите контейнер для тома, схема именования означает, что вам будет трудно определить, какая директория содержит том.

Итак, конкретные вопросы:

  • Да и да, с вышеописанными оговорками.
  • Каждый управляемый том Docker получает новый каталог на хосте
  • Инструкция VOLUME идентична -v без указания ведущего каталога. Когда указатель хоста указан, Docker не создает никаких каталогов для тома, не копирует файлы из образа и никогда не удалит том (docker rm -v CONTAINER не удаляет тома, сопоставленные указанным в указателе каталогам хоста).

Дополнительная информация здесь:

http://container-solutions.com/2014/12/understanding-volumes-docker/