Тома данных Docker и подключение к хосту

Я только что прочитал документацию Docker и пытаюсь немного лучше понять Docker Data Volumes, чем документы, которые были немного нечеткими.

Насколько я понимаю, существует два способа подключения тома Docker:

  • Простое монтирование (например, docker run -it -v /data --name container1 busybox); и
  • Подключить к хосту (например, docker run -it --name container1 -v /path/on/host:/datavol busybox)

Но для того, чтобы том сохранялся при перезапуске контейнера или даже при замене контейнера (старый контейнер удаляется, новый создается/запускается), разве том не должен быть подключен к хост-компьютеру в обоих подходах?! ? Другими словами, если я не подключаюсь к хосту явным образом с помощью «Простого метода подключения», куда на самом деле монтируется том? И как это место выдерживает замену контейнеров?

Кроме того, в обоих случаях я предполагаю, что том является локальным только для данного хоста, и что если у вас есть Swarm или кластер, работающий на нескольких хостах, нет возможности использовать эти команды, чтобы контейнеры, работающие на разных хостах, могли получить доступ к этим томам. , да? (И я предполагаю, что именно здесь в игру вступают контейнеры томов данных, верно?) Заранее спасибо!


person smeeb    schedule 12.06.2017    source источник


Ответы (1)


разве том не должен быть смонтирован на хост-машине в обоих подходах?!?

Да, оба подхода основаны на каталоге хоста, который сохраняется на протяжении всего жизненного цикла контейнера.

Используйте эти команды, чтобы получить больше информации:

docker volume ls
docker volume inspect <volume-id>
# and
docker inspect <container-id>

(подход 1) куда на самом деле монтируется том?

Сделай это:

docker inspect <container-id>

Ваш ответ в "Источнике":

"Mounts": [
            {
                "Type": "volume",
                "Name": "96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001",
                "Source": "/var/lib/docker/volumes/96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001/_data",
                "Destination": "/data",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

Обратите внимание, что если вы работаете в OSX или Windows, этот источник ссылается на локальный каталог внутри виртуальной машины, на которой работает докер.

И как это место выдерживает замену контейнеров?

Они выживают, потому что основаны на локальных каталогах хоста (и они являются томами, поэтому они и существуют).

если у вас есть Swarm или кластер, работающий на нескольких хостах, нет возможности использовать эти команды, чтобы контейнеры, работающие на разных хостах, могли получить доступ к этим томам, да?

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

https://docs.docker.com/engine/tutorials/dockervolumes/#mount-a-shared-storage-volume-as-a-data-volume

person Robert    schedule 12.06.2017