有没有办法从两个jar子,如每个jar子位于它自己的层build立docker的形象

我使用sbt-native-packager和DockerPlugin来构build一个应用程序。 这个应用程序由两个项目组成:一个频繁变化,另一个几乎是静态的。 构build看起来像这样:

lazy val root = myProject("my-backend", ".") .enablePlugins(JavaAppPackaging, DockerPlugin).settings(dockerSettings: _*) .settings(dockerExposedPorts in Docker := List(80, 8080)) .dependsOn(servicesProject, coreProject) ... 

有没有办法build立一个每个项目(servicesProject,coreProject)将在一个单独的图层的Docker镜像? 在这种情况下,不需要一直下载静态/核心层。

你可以手动完成,而不需要sbt-native-packager。 您可以使用Dockerfile来创build一个包含核心工件的coreProject镜像。 然后为基于coreProject映像的servicesProject创build一个不同的Dockerfile,并包含经常更改的工件。 然后,您可以经常重buildservicesProject图像,下载将会更小。

这是一个常见的问题,我们还没有实现这个解决scheme。 有人试图通过分离静态和非静态的依赖关系来创build单独的构build,并创build单独的层,以便静态层被caching。

SBT Native Packager API可以处理这个用例。 基本思想是以下几点

  • 以静态和非静态方式拆分库的依赖关系
  • mappings in Docker设置中创build两个添加命令
  • 同时添加命令添加到相同的目录

看看makeAdd方法和mapGenericFilesToDocker ,它们实质上是创build了docker容器的内容。

如果你有一个工作的解决scheme,我们很乐意添加这个原型autoplugin。