Прочитав эту документацию, я почувствовал некоторое замешательство относительно того, как лучше всего управлять производительными данными приложений / служб.
Кажется, есть 3 варианта:
- Просто сопоставьте том с каталогом хоста (т.е.
-v
аргументом дляdocker run
) - Создать образ контейнера докера для данных (т.е. отдельный контейнер и
--volumes-from
) - Создание тома докера (т.е.
docker volume create
)
Похоже, что принятая практика - это вариант № 2, но мне интересно, какова цель № 3?
Особенно, как вы правильно обрабатываете эти сценарии, docker volume
и лучше ли использовать контейнер объема данных или это для каждой ситуации?
- Вам нужны данные приложения на отдельном уровне тома и / или хранилища на вашем сервере
- Резервное копирование
- Восстановление данных
btrfs scrub
его, чтобы найти и исправить поврежденные файлы. Я не уверен, как работает dockerized, но я полагаю, что он не защищает от гниения данных, поэтому мне всегда нужно полное восстановление, если происходит что-то плохое, а не просто восстановление отдельных файлов. Еще одна мысль, что он добавляет еще один уровень абстракции, поэтому он еще больше замедляет чтение и запись файлов. Я почему-то не вижу преимуществ # 2 и # 3, но у меня нет опыта работы с докером, так что это может измениться.Ответы:
Я думаю, что # 2 и # 3 - это почти одно и то же, главное отличие в том, что нет остановленного контейнера с # 3 (это буквально просто именованный том). Например, вы можете создать именованный том и сделать то же самое, что вы сделали бы с # 2
-v
вместо этого.Создайте именованный том:
Смонтируйте и запишите некоторые данные на этот том из контейнера:
Затем вы можете смонтировать тот же
test
том в другом контейнере и прочитать данные:Преимущество заключается в том, что том случайно не исчезнет, если вы удалите контейнер только для данных. Теперь вы управляете этим с помощью
docker volume
подкоманды.Это также открывает возможности для драйверов томов в будущем, чтобы вы могли создавать общие тома между хостами (т. Е. Именованные тома по NFS). Примерами этого могут быть Флокер и Конвой . В частности, в отношении перемещения или резервного копирования данных Convoy имеет специальные подкоманды для резервного копирования данных и позволяет хранить их в NFS или EBS, внешних по отношению к вашему хосту.
По этой причине я считаю, что более новым способом (Docker 1.9+) является использование именованного тома, а не контейнера только для данных.
источник
the volume won't accidentally disappear if you remove the data-only container
, Не могли бы вы уточнить? Спасибо.Начиная с Docker 1.9, создание именованных томов с помощью API томов (
docker volume create --name mydata
) предпочтительнее, чем контейнер томов данных. По состоянию на февраль 2016 года документация по томам Docker крайне устарела. Сами люди в Docker полагают, что контейнеры томов данных « больше не считаются рекомендуемым шаблоном », « именованные тома должны иметь возможность заменять тома только для данных в большинстве (если не во всех) случаях » и « нет причин, которые я вижу, чтобы использовать контейнеры только для данных ».источник