#docker #filesystems
Вопрос:
Я создаю приложение в контейнере docker, которое в конце концов придется считывать из файловой системы довольно большого размера (терабайт).
Само приложение будет запущено на другом устройстве.
Теперь мне интересно, что лучше использовать для подключения контейнера к этой файловой системе, тома или монтирования привязки?
Читайте ниже, только если хотите услышать от меня более подробные рассуждения
В документации для тома указано, если я правильно их прочитал, что содержимое тома будет находиться в месте на хост-системе, к которому у докера есть доступ. Это заставляет меня думать, что, когда я использую том, Docker попытается разместить копию действительно большой файловой системы на общем диске, где-нибудь на устройстве, на котором будет запущено приложение.
В документации по монтированию привязки говорится, что информация будет храниться в любом месте хост-системы. Мне кажется, это указывает на то, что исходная информация останется на общем диске без создания каких-либо копий. Но в нескольких других вопросах на этом сайте говорится, что производительность подключения привязки намного хуже, чем объем.
Комментарии:
1. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.
Ответ №1:
Поскольку вы уже знаете местоположение в хост-системе, которую хотите использовать, вам следует использовать крепление привязки.
docker run -v /mnt/very-large-device:/data ...
С именованным томом хранилище находится в элементах управления Docker, обычно внутри /var/lib/docker/volumes
на собственном хосте Linux или внутри скрытой виртуальной машины в других системах. Вы не можете (легко) контролировать, где на самом деле находится базовое хранилище. (Вы можете настроить систему так, чтобы вся установка Docker размещалась на большом диске, или использовать расширенные параметры тома для создания именованного тома, который на самом деле является монтированием привязки; и то, и другое сложнее, чем использование собственного варианта монтирования привязки Docker.)
… производительность монтирования привязки намного хуже, чем объем.
Это в основном верно для систем, отличных от Linux. В собственных системах Linux монтирование привязки и именованные тома должны иметь одинаковую производительность, и она должна быть примерно такой же, как у файловой системы контейнера. Однако в системах, отличных от Linux, Докеру необходимо установить мост между системой Linux внутри скрытой виртуальной машины и файловой системой хоста, и это может быть медленным в зависимости от шаблонов доступа.
Как и во всех вопросах производительности, лучший способ определить, что будет быстрее, — это фактически провести эксперимент с вашей предполагаемой системой и измерить ее.