Spring Boot の bootBuildImage で custom runImageを利用する
以前、↓みたいな記事を書きました。
Cloud Native Buildpacksのrun:base-cnb に curlを入れたい - 秋の魔法使い
Spring Bootのコードを読んで研究したところ、もっと一般的な解決方法に気づいたので記事にしておきます。
(普通にリファレンスにも書いてあったので、俺がアホなだけ、ということなのですが 😎)
custom run image build
buildImageをカスタマイズするためにDockerfileを書きます。今回はcurlとgrpcurlを追加します。
FROM paketobuildpacks/run:base-cnb # custom start USER root ARG package_args='--no-install-recommends' ARG grpcurl_version='1.7.0' RUN echo "debconf debconf/frontend select noninteractive" | debconf-set-selections && \ export DEBIAN_FRONTEND=noninteractive && \ apt-get -y $package_args update && \ apt-get -y $package_args install curl && \ apt-get clean && \ cd /usr/local/src && \ curl -OL "https://github.com/fullstorydev/grpcurl/releases/download/v${grpcurl_version}/grpcurl_${grpcurl_version}_linux_x86_64.tar.gz" && \ tar -zxvf "grpcurl_${grpcurl_version}_linux_x86_64.tar.gz" && \ mv grpcurl /usr/local/bin && \ rm -f "grpcurl_${grpcurl_version}_linux_x86_64.tar.gz" LICENSE && \ rm -rf \ /usr/share/man/* /usr/share/info/* \ /usr/share/groff/* /usr/share/lintian/* /usr/share/linda/* \ /var/lib/apt/lists/* /tmp/* # custom end USER cnb
$ docker build -t my-run-image -f run.Dockerfile
参考
bootBuildImage
bootBuildImageでImageを作成する際に pullPolicyにIF_NOT_PRESENTを指定します。こうすることで、runImageは作成したLocalのものを利用し、builderImageはdefaultのbuilder:base-cnbをダウンロードして利用することになります。すでにbase-cnbがLocalに存在する場合落としてくれない (と思う) ので、最新を利用したい場合事前に削除するなり更新するなりしておきましょう。
$ ./gradlew bootBuildImage --runImage my-run-image --pullPolicy IF_NOT_PRESENT
参考
Spring Boot Gradle Plugin Reference Guide
まとめ
この方法ならCodeBuildとかにも簡単に組み込めそうです 😌