すきま風

勉強したことのメモとか

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

参考

GitHub - GoogleCloudPlatform/buildpacks: Builders and buildpacks designed to run on Google Cloud's container platforms

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とかにも簡単に組み込めそうです 😌