Как ускорить сборку sbt scala в докере?

Как не использовать регулярное выражение:

// In PHP
0 !== strpos($string, 'index.php')
3
задан Андрей Олегович Матвеев 17 January 2019 в 04:43
поделиться

2 ответа

Вы можете сослаться на решение travis:

.travis.yaml:

# These directories are cached to S3 at the end of the build
cache:
  directories:
    - $HOME/.ivy2/cache
    - $HOME/.sbt/boot/

Трэвис сделает резервную копию двух вышеуказанных папок на s3, затем каждый раз перед перестройкой пользователь извлекает две папки из кэша.

Итак, мы можем знать, что возможный способ не загружать jackson library снова может быть разделен на .ivy2 & amp; .sbt и поместите их в нечто вроде кэша.

В вашей ситуации, я думаю, лучшее решение - сохранить их в базовом изображении, базовое изображение Dockerfile может просто совпадать с тем, которое вы используете сейчас (конечно, вы можете упростить его, просто добавив определение библиотеки Джексона в build.sbt цель просто состоит в том, чтобы у .ivy2 была библиотека Джексона), затем, например, пометьте его как mybaseimage: v1

Тогда Dockerfile вашего нового проекта может использовать base mybaseimage:v1, так как mybaseimage уже имеет библиотеку в .ivy2 & amp; .sbt, поэтому нет необходимости загружать jackson снова каждый раз, когда вы создаете Dockerfile вашего проекта.

Решение может быть некрасивым, но я думаю, что это могло бы стать обходным путем, только к вашему сведению.

0
ответ дан atline 17 January 2019 в 04:43
поделиться

Во-первых, вам не нужно устанавливать RPM-пакет scala, поскольку SBT сам загружает для вас Scala (какая версия настроена в вашей сборке).

Во-вторых, каждая команда RUN создает новый слой, которого вы обычно избегаете. Объедините их:

RUN cmd1 \
  && cmd2 \
  && cmd3

Почему вы хотите создать образ для каждой из ваших сборок? Это кажется расточительным. Обычно вы создаете свои вещи вне образа Docker и только упаковываете результаты.

Мой совет - использовать плагин sbt-native-packager SBT с интеграцией Docker , чтобы просто создать образ из ваших артефактов после их создания. Таким образом, вам понадобится только JRE в вашем изображении, а не JDK, не SBT. Кроме того, вам не нужно ждать инициализации SBT при запуске вашего изображения.

Вы можете использовать многоэтапные сборки , если у вас установлена ​​новая версия Docker.

0
ответ дан cbley 17 January 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: