Есть ли способ построить образ докера из двух jar-файлов, например, каждый jar находится в своем собственном слое
Я использую sbt-native-packager вместе с DockerPlugin для создания приложения. Это приложение состоит из двух проектов: один часто меняется, а другой почти статичен. Сборка выглядит так:
lazy val root = myProject("my-backend", ".")
.enablePlugins(JavaAppPackaging, DockerPlugin).settings(dockerSettings: _*)
.settings(dockerExposedPorts in Docker := List(80, 8080))
.dependsOn(servicesProject, coreProject)
...
Есть ли способ построить образ Docker, где каждый из проектов (servicesProject, coreProject) будет находиться в отдельном слое? В этом случае не нужно будет постоянно загружать статический / основной слой.
2 ответа
Это общая проблема, и мы еще не реализовали решение для этого. Была попытка решить эту проблему для отдельных сборок путем разделения зависимостей на статические и нестатические и создания отдельных слоев для кэширования статического слоя.
API-интерфейс SBT Native Packager способен обрабатывать этот вариант использования. Основная идея заключается в следующем
- разделить библиотечные зависимости на статические и нестатические
- создать две команды добавления из
mappings in Docker
установка - обе команды add добавляют в один и тот же каталог
Взгляните на метод makeAdd и mapGenericFilesToDocker, которые по сути создают содержимое контейнера Docker.
Если у вас есть рабочее решение, мы будем рады добавить этот автоплагин архетипа.
Вы можете сделать это вручную, без sbt-native-packager. Вы можете использовать Dockerfile для создания образа coreProject, который содержит ваши основные артефакты. Затем создайте другой файл Docker для servicesProject, который основан на образе coreProject и содержит часто изменяющиеся артефакты. Затем вы можете часто перестраивать образ servicesProject, и загрузка будет меньше.