Повышается ли производительность чтения / записи при использовании docker томов на windows (только внутри контейнера docker) или смонтированного / общего тома с ОС хоста? - PullRequest
1 голос
/ 21 июня 2020

Я читал, что при монтировании общих томов на windows производительность значительно снижается. Как это по сравнению с тем, чтобы указать только postgres DB внутри тома docker (не используется совместно с ОС хоста) или скорость чтения / записи из / в плоские файлы?

Кто-нибудь нашел что-нибудь конкретные цифры вокруг этого? Я думаю, что даже 4-кратное замедление было бы приемлемым для моего варианта использования, если бы оно предназначалось только для DIS c производительности ввода-вывода ... У меня создается впечатление, что смонтированные + общие тома значительно медленнее на windows .. . поэтому я хочу знать, поможет ли отказ от этого совместного использования компонента улучшить ситуацию до приемлемого диапазона.

Также, если я оставлю Postgres на голом железе, все мои docker приложения смогут получить доступ Postgres все еще так? (Это, вероятно, предпочтительнее, чем я могу себе представить - я видел отчеты о том, что чтение / запись в 4 раза быстрее остается на голом железе) - но мне все еще нужно знать ... потому что мои приложения также имеют дело с большим количеством операций копирования / чтения / перемещения плоских файлов. .. так что нужно знать, что для этого лучше всего.

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

Спасибо за любые идеи

1 Ответ

2 голосов
/ 21 июня 2020

Вы платите только за производительность подключаемых каталогов хоста. Тома с именами Docker или файловая система контейнера Docker будут работать намного быстрее. Стандартные образы базы данных Docker Hub сконфигурированы так, чтобы всегда использовать том для хранения, поэтому в этом случае вам следует использовать именованный том.

docker volume create pgdata
docker run -v pgdata:/var/lib/postgresql/data -p 5432:5432 postgres:12

Вы также можете запустить PostgreSQL непосредственно на хосте. В системах, использующих приложение Docker Desktop, вы можете получить к нему доступ через специальное имя хоста host.docker.internal. Это подробно обсуждается в Изнутри контейнера Docker, как мне подключиться к локальному хосту машины? .

Если вы используете приложение Docker Desktop , и вы используете тома для:

  • Непрозрачного хранилища базы данных, например данных PostgreSQL: используйте именованный том; это будет быстрее, и вы не сможете напрямую получить доступ к данным, даже если они у вас есть на хосте
  • Внедрение отдельных файлов конфигурации: используйте привязку монтирования; обычно они читаются только один раз при запуске, поэтому не требуется больших затрат на производительность
  • Экспорт файлов журнала: используйте привязку монтирования; если операций ввода-вывода журнала достаточно, чтобы вызвать проблемы с производительностью, вы, вероятно, активно отлаживаете
  • Исходный код вашего приложения: не используйте том вообще, запустите код, показанный на изображении, или используйте собственная среда разработки хоста
...