Тома и ОБЪЕМ: путь должен существовать в обоих местах?
Если я собираюсь запустить 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
... и я использую файловую систему Docker HOST для хранения nginx
Конфиги и сам сайт, мне не нужно включать VOLUME заявление для этих акций, или я должен?
VOLUME ["/etc/nginx", "/var/www","/var/log/nginx"]
На самом деле, не могу ли я удалить эти каталоги из образа в Dockerfile, так как они не будут использоваться?
RUN rm -rf /usr/share/nginx/www /etc/nginx /var/log/nginx
Спасибо за ваш отзыв!
1 ответ
Определение -v
при запуске или объемах в VOLUME
обе инструкции монтируют том, который обходит UFS для хранения постоянных данных. См. https://docs.docker.com/terms/layer/. Это фактическое крепление в контейнере:
$ 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
,