Scala 是否有一种方法可以从两个jar(例如每个jar位于其中)构建docker映像';s自己的层
我正在使用sbt native packager和DockerPlugin构建一个应用程序。 此应用程序由两个项目组成:一个项目经常更改,另一个几乎是静态的。 构建如下所示:Scala 是否有一种方法可以从两个jar(例如每个jar位于其中)构建docker映像';s自己的层,scala,docker,sbt,sbt-native-packager,Scala,Docker,Sbt,Sbt Native Packager,我正在使用sbt native packager和DockerPlugin构建一个应用程序。 此应用程序由两个项目组成:一个项目经常更改,另一个几乎是静态的。 构建如下所示: lazy val root = myProject("my-backend", ".") .enablePlugins(JavaAppPackaging, DockerPlugin).settings(dockerSettings: _*) .settings(dockerExposedPorts in Docke
lazy val root = myProject("my-backend", ".")
.enablePlugins(JavaAppPackaging, DockerPlugin).settings(dockerSettings: _*)
.settings(dockerExposedPorts in Docker := List(80, 8080))
.dependsOn(servicesProject, coreProject)
...
是否有一种方法可以构建Docker映像,其中每个项目(servicesProject、coreProject)将位于单独的层中?
在这种情况下,无需一直下载静态/核心层。您可以手动完成,无需sbt本机打包机。您可以使用Dockerfile创建包含核心构件的coreProject映像。然后为servicesProject创建一个不同的Dockerfile,它基于coreProject映像并包含经常更改的工件。然后,您可以经常重建servicesProject映像,下载量将更小。这是一个常见问题,我们尚未实现解决方案。对于单个构建,需要解决这个问题,方法是在静态和非静态中拆分依赖项,并创建单独的层,以便缓存静态层 SBT Native Packager API能够处理此用例。基本思想如下
- 将库依赖项拆分为静态和非静态
- 在Docker的
映射中创建两个add命令
- 两个add命令都添加到同一目录
如果您有一个有效的解决方案,我们将很高兴将其添加为原型autoplugin。谢谢您的建议。但在这种情况下,我应该始终记住在发生更改时更新coreProject映像。最好在一张图像中有单独的图层,这样所有更新都会自动进行。