Как заставить sbt-native-packager объединить два слоя образа докера

Я использую sbt-native-packager для создания образа докера из приложения Scala. Полученное изображение состоит из двух слоев одинакового размера:

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.). Проблема в том, что они оба загружаются при вытягивании. Есть ли способ объединить эти два слоя в один ради размера изображения?


person alson    schedule 30.09.2015    source источник


Ответы (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.

person alson    schedule 30.09.2015