【问题标题】:How to make sbt-native-packager combine two layers of docker image如何让sbt-native-packager结合两层docker镜像
【发布时间】:2015-12-28 05:52:57
【问题描述】:

我正在使用 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 daemon:daemon。)。问题是它们都是在拉取期间下载的。 为了图像大小,有没有办法将这两个层合并为一个?

【问题讨论】:

    标签: scala docker sbt sbt-native-packager


    【解决方案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
        })
    

    DockerPlugin 文档中描述了此解决方案http://www.scala-sbt.org/sbt-native-packager/formats/docker.html#remove-commands

    【讨论】:

      猜你喜欢
      • 2017-10-03
      • 2015-10-03
      • 2018-05-18
      • 2020-11-07
      • 2017-09-28
      • 2014-12-01
      • 2017-07-10
      • 2015-03-14
      • 1970-01-01
      相关资源
      最近更新 更多