Объемы и ОБЪЕМ: путь должен существовать в обоих местах?

Если я собираюсь выполнить nginx как так:

docker run -i -t -p 80:80 \
-v /docker/dev:/dev \
-v /docker/var/www:/var/www \
-v /docker/var/log/nginx:/var/log/nginx \
-v /docker/etc/nginx:/etc/nginx \
--name clmnginxbash quasaur/nginximage /bin/bash

... и я использую файловую систему ХОСТА Докера для хранения nginxконфигурации и сам веб-сайт, мне не придется включать оператор VOLUME для тех долей, или должен я?

VOLUME ["/etc/nginx", "/var/www","/var/log/nginx"]

На самом деле разве я не должен мочь удалить те каталоги из изображения в Dockerfile, так как они не собираются быть используемыми?

RUN rm -rf /usr/share/nginx/www /etc/nginx /var/log/nginx

Спасибо за Вашу обратную связь!

1
задан 8 September 2014 в 23:38
1 ответ

Указание -v при запуске или тома в инструкции VOLUME монтируют том, который обходит UFS для хранения постоянных данных. См. https://docs.docker.com/terms/layer/#ufs-def . Это фактическое крепление в контейнере:

$ docker run --rm ubuntu mount | grep mnt

В контейнере ничего не установлено. Давайте попробуем это еще раз с помощью -v / mnt :

$ docker run --name mount -v /mnt ubuntu mount | grep mnt
/dev/sda1 on /mnt type ext4 (rw,relatime,data=ordered)

Круто, у нас есть постоянное монтирование. Но мы не указали место на хосте для его хранения ... где оно на самом деле живет?

$ docker inspect --format '{{ .Volumes }}' mount
map[/mnt:/mnt/sda1/var/lib/docker/vfs/dir/3d0eff68f9db4821821812f9e363c1e6058105de8a7a04ecfda113e8def9848a]

Как вы уже отметили, вы можете сопоставить это монтирование с каталогом на хосте, добавив к нему какой-нибудь префикс:

$ docker run --rm -v /folder/on/host:/mnt

Итак, чтобы ответить на два ваших вопроса, нет, инструкции VOLUME в Dockerfile не требуются. Стоит ли их удалять? Я предполагаю, что у вас никогда не будет постоянных данных в контейнерах без указания -v .

1
ответ дан 4 December 2019 в 00:19

Теги

Похожие вопросы