Объем докера и ОБЪЕМ внутри Dockerfile - PullRequest
0 голосов
/ 23 декабря 2018

Я путаюсь с тем, что отличается между созданием docker volume create my-vol и VOLUME ["/var/www"].

Насколько я понимаю:

1) docker volume create my-vol создает постоянный том на нашей машине икаждый контейнер может быть связан с my-vol.

2) VOLUME ["/var/www"] создает том внутри своего контейнера.

И когда я создаю другой контейнер, я могу связать my-volследующим образом: при запуске контейнера

$ docker run -d --name devtest --mount source=myvol2,target=/app nginx:latest

В то время, если я добавил VOLUME ["/var/www"] в свой Dockerfile, все данные этого файла Docker будут храниться как в myvol2, так и в /var/www?

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Команда Dockerfile VOLUME говорит о двух вещах:

  1. Если оператор явно не монтирует том в определенную директорию контейнера, в любом случае создайте там анонимный том.

  2. Никакой шаг Dockerfile никогда не сможет внести дальнейшие изменения в это дерево каталогов.

Как оператор вы можете смонтировать том (либоименованный том или каталог хоста) в контейнер с параметром docker run -v.Вы можете подключить его к любому каталогу в контейнере, независимо от того, был ли VOLUME объявлен для него в Dockerfile.

(Так как вы можете использовать docker run -v независимо от того, объявили вы или нетVOLUME, и это имеет запутанные побочные эффекты, я бы вообще не стал объявлять VOLUME в Dockerfiles.)

Как и в обычном Linux, только одна вещь может (полезно) быть смонтирована в любом данном каталоге.При описанной вами настройке данные будут храниться в myvol2, который вы создаете и монтируете, и они будут видны в /var/www в контейнере, но на самом деле данные будут храниться только в одном месте.Если вы удалите и заново создадите контейнер без монтирования тома, данных больше не будет.

0 голосов
/ 23 декабря 2018

Существует два типа постоянного хранилища, используемого в Docker, первый из них - Docker Volumes, а второй - bind mounts.Различие между ними заключается в том, что тома являются внутренними по отношению к Docker и хранятся в хранилище Docker (которое обычно находится в каталоге / var / lib / docker), а монтирование bind использует физическое расположение на вашем компьютере для хранения постоянных данных.

Если вы хотите использовать том Docker для nginx:

Том docker создайте nginx-vol

docker run -d --name devtest -v nginx-vol: / usr /share / nginx / html nginx

Если вы хотите использовать привязку:

docker run -d --name devtest -v [путь]: / usr /share / nginx / html nginx

[путь] - это место, в котором вы хотите сохранить данные контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...