Разница между -volume и -volumes-from в томах Docker - PullRequest
3 голосов
/ 17 октября 2019

Какова точная разница между двумя флагами, используемыми в командах громкости Docker -v и --volumes-from. Мне кажется, что они выполняют ту же работу, рассмотрим следующий сценарий.

Сначала давайте создадим том с именем myvol, используя команду:

$ docker volume create myvol

Теперь создайте и запустите контейнерс именем c1, использующим myvol и входящим в его bash:

$ docker run -it --name c1 -v myvol:/data nginx bash

Позволяет создать файл test.txt в смонтированном каталоге контейнера как:

root@766f90ebcf37:/# touch /data/test.txt
root@766f90ebcf37:/# ls /data
test.txt

Использование-volume flag:

Теперь создайте еще один контейнер с именем c2, который также использует myvol:

$ docker run -it --name c2 -v myvol:/data nginx bash

Как и ожидалось, новый сгенерированный контейнер c2 также имеет доступ ко всемфайлы myvol

root@393418742e2c:/# ls /data
test.txt  

Теперь делаем то же самое с --volumes-from

Создание контейнера с именем c3 с использованием томов из контейнера c1

$ docker run -it --name c3 --volumes-from c1 nginx bash

Это приведет к тому же самому в c3:

root@27eacbe25f92:/# ls /data
test.txt

Дело в том, что -v и --volumes-from работают одинаково, то есть для обмена данными между контейнерами, тогда почему они разныефлаги и что --volumes-from может сделать то, что -v не может сделать?

1 Ответ

2 голосов
/ 17 октября 2019

Дело в том, что -v и --volumes-from работают одинаково, т.е. для обмена данными между контейнерами

-v и --volumes-from не работают одинаковоКстати, но с обоими из них вы можете обмениваться данными между контейнерами.

что может сделать --volumes-from, чего не может сделать -v?

Например, он может подключаться к другим контейнерам томов, не зная, как называются тома, и вы не указываете путь. Вы можете добавлять суффиксы к идентификаторам контейнеров с такими правами доступа, как :ro или :rw. Подробнее здесь - Монтирование томов из контейнера (--volumes-from) раздел

Другой вопрос: что -v может сделать это --volumes-from не может сделать?
Например, он может монтировать именованные тома, вы можете монтировать каталоги хоста или tmpfs (этот вы не можете разделить между контейнерами). В --volume-from вы не можете обмениваться данными с хостом напрямую.

Вывод таков: цель --volume - обмен данными с хостом. ( здесь вы можете найти больше вариантов использования ).
Цель --volumes-from - обмен данными между контейнерами.
Они оба прекрасно работают вместе.

...