我使用sbt-native-packager和DockerPlugin构建应用程序。 这个应用程序包含两个项目:一个是频繁更改,另一个几乎是静态的。 Build看起来像这样:
lazy val root = myProject("my-backend", ".")
.enablePlugins(JavaAppPackaging, DockerPlugin).settings(dockerSettings: _*)
.settings(dockerExposedPorts in Docker := List(80, 8080))
.dependsOn(servicesProject, coreProject)
...
有没有办法构建一个Docker镜像,其中每个项目(servicesProject,coreProject)都在一个单独的层中? 在这种情况下,不需要一直下载静态/核心层。
答案 0 :(得分:1)
你可以手动完成,没有sbt-native-packager。您可以使用Dockerfile创建包含核心工件的coreProject映像。然后为servicesProject创建一个基于coreProject映像的不同Dockerfile,并包含经常更改的工件。然后,您可以经常重建servicesProject图像,下载将更小。
答案 1 :(得分:1)
这是一个常见问题,我们尚未为此实施解决方案。通过在静态和非静态中拆分依赖关系并创建单独的层以便缓存静态层,有an attempt来解决单个构建问题。
SBT Native Packager API能够处理此用例。基本思路如下
mappings in Docker
设置查看the makeAdd method和mapGenericFilesToDocker,它们基本上会创建泊坞广告容器内容。
如果你有一个可行的解决方案,我们很乐意添加一个原型autoplugin。