我正在使用sbt-native-packager从Scala应用程序构建docker镜像。 结果图像中有两个相似大小的图层:
docker history --no-trunc docker.example.com/scala-app
...
b49580a36beb6c7cd020ad006954f245aebf82041d3e79eff1517fdbf58ae6cd About an hour ago chown -R daemon:daemon . 125.2 MB
f12b3a929ded4161044642e117114b57889613d77186a0a727862ab5a44af5e3 About an hour ago /bin/sh -c #(nop) ADD dir:678c325d24285ae96f682c6abc3d71cc8a17ee6267a2db4fff232fcaaa5dec13 in /opt 125.2 MB
...
我假设这两个层仅在所有权方面有所不同(chown -R守护程序:守护程序。)。问题是它们都是在拉动期间下载的。 有两种方法可以将这两个层合并为一个图像尺寸吗?
答案 0 :(得分:1)
我设法通过覆盖dockerCommands来改变这种行为:
lazy val root = myProject("scala-app", ".")
.enablePlugins(JavaAppPackaging, DockerPlugin).settings(dockerSettings: _*)
.settings(dockerCommands in Docker := dockerCommands.value.filterNot {
// remove chown command because it creates redundant image layer
case ExecCmd("RUN", args @ _*) => args.contains("chown")
// don't filter the rest
case cmd => false
})
此解决方案在http://www.scala-sbt.org/sbt-native-packager/formats/docker.html#remove-commands的DockerPlugin文档中进行了描述。