Поделиться томами докера с нескольких хостов? - PullRequest
0 голосов
/ 28 апреля 2018

https://nickjanetakis.com/blog/docker-tip-28-named-volumes-vs-path-based-volumes

, по-видимому, предполагает, что и named volumes, и path based volumes хранятся на хосте докера (где выполняются контейнеры)

Предположим, у меня есть услуги web и nginx.

Я думал, что смогу запустить службу web на одном хосте и nginx на другом хосте (две разные машины). (Хотя я только начинаю изучать основы докера, и пройдет много времени, прежде чем я смогу разделить сервисы на разные хосты)

Есть ли способ для контейнера nginx обслуживать статические файлы, которые есть у службы web, путем совместного использования томов между ними?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Docker пока не имеет встроенного программного решения для совместного использования томов на нескольких машинах. Есть работа над infinit , но они ничего не выпустили для производственного использования.

Существуют сторонние решения для хранения данных, которые вы можете использовать. Если вы работаете в облачном провайдере, их решение, как правило, лучше всего подходит для вашего случая использования. Для самостоятельного программного решения вы можете использовать что-то вроде glusterfs. Приложения, которые сами обрабатывают репликацию данных, являются идеей для контейнеров, например cockroachdb.

Типичное автономное решение - использовать NFS. Даже с облачными провайдерами я обычно использую их метод NFS для монтирования хранилища. Из докера это выглядит следующим образом:

  # create a reusable volume
  $ docker volume create --driver local \
      --opt type=nfs \
      --opt o=nfsvers=4,addr=192.168.1.1,rw \
      --opt device=:/path/to/dir \
      foo

  # or from the docker run command
  $ docker run -it --rm \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
    foo

  # or to create a service
  $ docker service create \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
    foo

  # or inside a docker-compose file
  ...
  volumes:
    nfs-data:
      driver: local
      driver_opts:
        type: nfs
        o: nfsvers=4,addr=192.168.1.1,rw
        device: ":/path/to/dir"
  ...

Обратите внимание, что IP-адреса в каждом из них могут быть именами хостов, если вы сохраняете тип nfs.

0 голосов
/ 28 апреля 2018

Если ваши док-контейнеры работают на одном хосте, то это очень просто. Вы просто (как часть run в моем примере, но могли быть созданы автономно) создаете том и монтируете его в обоих контейнерах.

# Create a volume /data in a new container
$ docker run \
  -v /data \
  -it \
  --name mycontainer \
  ubuntu \
  /bin/bash
root@435cb561e0eb:/# touch /data/test

Затем в другой оболочке я запускаю другой контейнер Ubuntu (не обязательно должен быть Ubuntu, может быть другое изображение):

# Mount the same volume in another container
$ docker run \
  --volumes-from mycontainer \
  -it \
  ubuntu \
  /bin/bash
root@de70d474df7a:/# ls /data/
test

Тогда вам просто нужно убедиться, что веб-часть вашего приложения использует это монтирование (в данном случае /data) для хранения данных, которые вам нужно совместно использовать между двумя хостами.

Что касается между несколькими хостами. Docker этого не делает, но может создать NFS или что-то еще для этого.

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