mike-neckのブログ

Java or Groovy or Swift or Golang

SpringBoot 2.3.0.M1 で buildpack による Docker image 生成ができるようになってたので試してみた

表題の通り、簡単に試してみた。

以下、手順。

$ curl https://start.spring.io/starter.zip -o demo.zip \
    --data dependencies=web \
    --data bootVersion=2.3.0.M1 \
    --data type=gradle-project
$ unzip demo.zip -d demo
$ cd demo
$ ./gradlew tasks
$ ./gradlew bootBuildImage

tasks の出力結果が次の通りで、 bootBuildImage というタスクが追加されている

f:id:mike_neck:20200126094802p:plain


bootBuildImage タスクで Docker image が生成できる。 jib と同じで、初回は非常に時間がかかるものの、 2 回目以降は高速に実行できる。 したがって、 CI などでビルドする場合は、タイムアウトの設定に気をつける必要があるかもしれない。

f:id:mike_neck:20200126094910p:plain

BootBuildImage タスクのコードを見る限り、設定できるのは、

  • imageName - Docker image の名前
  • environment(String name, String value) - --build-arg に相当するパラメーター(ただし何が設定できるのかわからない)
  • from(File jar) - 起動する jar ファイル。 File の代わりに BootJar タスクも指定できる
  • builder - 他に取り込みたいイメージ。

github.com

builder に指定できる値はなにかわからなかったので、適当に python:3-slim を指定してみたところ、エラーになった。

f:id:mike_neck:20200126100903p:plain


ビルドした結果、次のようなイメージが追加される

f:id:mike_neck:20200126101021p:plain

作ったイメージ(demo) の他に、 cloudfoundry/cnbcloudfoundry/run なるイメージが追加されている。

demo イメージの docker historycloudfoundry/rundocker history の結果を比較して、 cloudfoundry/run がベースのイメージとして使われているっぽい

f:id:mike_neck:20200126101237p:plain
cloudfoundry/run

f:id:mike_neck:20200126101342p:plain
cloudfoundry/run


なお、 demo を起動後に、コンテナに潜って OS を調べてみたら、 Ubuntu だった

f:id:mike_neck:20200126101511p:plain

起動しているコマンドは java -jar だった。

f:id:mike_neck:20200126101729p:plain

なお、潜っているときに launchar なるエグゼキュータブルを見つけて、それでも起動できることがわかったが、何に使うのかはわからなかった

f:id:mike_neck:20200126101837p:plain


おわり