Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 是否有一种方法可以从两个jar(例如每个jar位于其中)构建docker映像';s自己的层_Scala_Docker_Sbt_Sbt Native Packager - Fatal编程技术网

Scala 是否有一种方法可以从两个jar(例如每个jar位于其中)构建docker映像';s自己的层

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

我正在使用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)将位于单独的层中?
在这种情况下,无需一直下载静态/核心层。

您可以手动完成,无需sbt本机打包机。您可以使用Dockerfile创建包含核心构件的coreProject映像。然后为servicesProject创建一个不同的Dockerfile,它基于coreProject映像并包含经常更改的工件。然后,您可以经常重建servicesProject映像,下载量将更小。

这是一个常见问题,我们尚未实现解决方案。对于单个构建,需要解决这个问题,方法是在静态和非静态中拆分依赖项,并创建单独的层,以便缓存静态层

SBT Native Packager API能够处理此用例。基本思想如下

  • 将库依赖项拆分为静态和非静态
  • 在Docker的
    映射中创建两个add命令
  • 两个add命令都添加到同一目录
看一下和,它本质上创建了docker容器内容


如果您有一个有效的解决方案,我们将很高兴将其添加为原型autoplugin。

谢谢您的建议。但在这种情况下,我应该始终记住在发生更改时更新coreProject映像。最好在一张图像中有单独的图层,这样所有更新都会自动进行。