Как не использовать регулярное выражение:
// In PHP
0 !== strpos($string, 'index.php')
Вы можете сослаться на решение 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 вашего проекта.
Решение может быть некрасивым, но я думаю, что это могло бы стать обходным путем, только к вашему сведению.
Во-первых, вам не нужно устанавливать RPM-пакет scala, поскольку SBT сам загружает для вас Scala (какая версия настроена в вашей сборке).
Во-вторых, каждая команда RUN
создает новый слой, которого вы обычно избегаете. Объедините их:
RUN cmd1 \
&& cmd2 \
&& cmd3
Почему вы хотите создать образ для каждой из ваших сборок? Это кажется расточительным. Обычно вы создаете свои вещи вне образа Docker и только упаковываете результаты.
Мой совет - использовать плагин sbt-native-packager SBT с интеграцией Docker , чтобы просто создать образ из ваших артефактов после их создания. Таким образом, вам понадобится только JRE в вашем изображении, а не JDK, не SBT. Кроме того, вам не нужно ждать инициализации SBT при запуске вашего изображения.
Вы можете использовать многоэтапные сборки , если у вас установлена новая версия Docker.