В настоящее время я пытаюсь скопировать данные из моего postgres, который работает в контейнере докеров, на мой хост Windows. Для этой цели я реализовал java-приложение (также в контейнере докеров), которое использует драйвер postgres-jdbc и его CopyManager для копирования определенных данных на хост в сопоставленном томе.
Проблема: Когда я копирую данные в сопоставленный каталог Windows, это становится очень медленным. (Запись 1 ГБ данных занимает около 40 минут, без сопоставления томов всего 1 минута)
Докер-составить:
exportservice:
build: ./services/exportservice
volumes:
- samplePath:/export_data
Я уже читал, что это известная проблема, но подходящего решения не нашел. Мои службы должны работать в производственной среде, основанной на Windows. Итак, как решить эту проблему? WSL2?
С нетерпением жду вашего совета!
Монтирование папки Windows в контейнер Docker всегда происходит медленно, независимо от того, как вы это делаете. В этом отношении WSL2 даже медленнее, чем WSL1.
Лучшее решение — установить WSL2, скопировать все файлы вашего проекта в файловую систему Linux (смонтированную в Windows по адресу \\wsl$\<distro>\
), запустить оттуда контейнеры и соответствующим образом смонтировать каталоги Linux. Это обходит любое взаимодействие с файлами Windows.
Я написал книгу Docker для веб-разработчиков и видеокурс, потому что не смог найти хороших руководств по началу работы, объясняющих, как создавать локальные среды разработки. Он включает инструкции и советы по Hyper-V и WSL2. Используйте код скидки dock30
для скидки 30%.
«Это исключает любое взаимодействие с файлами Windows». - на данный момент я могу просто переключиться на Linux, так как я больше не могу использовать какие-либо инструменты Windows во время разработки.
Используйте WSL2 вместо WSL и используйте файловую систему Linux. Но вы также можете сократить циклы записи, чтобы уменьшить накладные расходы на запись. Этого можно добиться, используя BufferedWriter в Java.
Большое спасибо! Время вызовов API увеличилось с 31 до 433 мс! Теперь я снова могу развиваться :-D