関連記事

Limaを使って仮想マシンを構築してみる

BackstageのDockerイメージをビルドしてみる




Cloud Native Buildpacksについてざっくり解説し、実際に使ってどんなことができるか試してみたいと思います。
Cloud Native Buildpacksとは、アプリケーションのソースコードからコンテナイメージ(OCIイメージ)を作成するツールです。


Cloud Native Buildpacks
Cloud Native Buildpacks transform your application source code into images that can run on any cloud.
元々はHerokuが開発したBuildpacksというツールから派生したツールになります。
公式ドキュメントより
まずはCloud Native Buildpacksのコンポーネントについて紹介します。
コンポーネントについては、ざっくりでも理解していないと何が何だかわからなくなるので、理解した方がいいと思います。
もう少し詳しくCloud Native Buildpacksが、どんなことをできるのかBuildpackとBuilderをメインに紹介します。
BuildpackはDockerfileなしでソースコードからOCIイメージを作成できます。 Dockerfileなしでイメージの作成ができるため、Dockerfileのベストプラクティスに従ったりなどの管理の手間がなくなります。
公式ドキュメントより
Buildpackは2つのフェーズからイメージを作成します。
requirements.txtがあるか、setup.pyがあるかpip isntall -r requirements.txtを実行Detectフェーズで検知された形式(buildpack)でビルドするという流れになります。
公式ドキュメントより
Builderは、buildpack・lifecycle・stackなどのビルドに必要なコンポーネントを集めたイメージになります。
公式ドキュメントより
lifecycleがDetectフェーズで全てのbuildpackを使って、Buildフェーズで検知されたbuildpackを使ってビルドします。
実際にCloud Native BuildpacksのPlatformの1つであるpackコマンドを使ってイメージを作成してみます。
brewを使って、packコマンドをインストールします。
1brew install buildpacks/tap/packGitHub - buildpacks/pack: CLI for building apps using Cloud Native Buildpacks
CLI for building apps using Cloud Native Buildpacks - buildpacks/pack
公式からサンプルアプリケーションが用意されているので、その中からJavaアプリケーションを利用します。
GitHub - buildpacks/samples: Samples for Cloud Native Buildpacks
Samples for Cloud Native Buildpacks. Contribute to buildpacks/samples development by creating an account on GitHub.
cloneして、サンプルアプリケーションのディレクトリに移動します。
1git clone https://github.com/buildpacks/samples
2cd samples/apps/java-mavenBuilderを指定して、ビルドを実行します。
cnbs/sample-builder - Docker Image
1pack build myapp --builder cnbs/sample-builder:bionicイメージを確認すると作成されているのがわかります。
1❯ docker image ls
2REPOSITORY TAG IMAGE ID CREATED SIZE
3myapp latest 1685917a9047 42 years ago 300MB作成したイメージを使ってコンテナを起動してみます。
1docker run --rm -p 8080:8080 myapphttp://localhost:8080にアクセスするとアプリケーションがしっかりビルドされて、イメージからコンテナが実行されたことが確認できます。

Dockerfileなしで、コマンド1つからイメージ作成ができました。