Cloud Native Buildpacksについてざっくり理解する
はじめに
Cloud Native Buildpacksについてざっくり解説し、実際に使ってどんなことができるか試してみたいと思います。
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のコンポーネントについて紹介します。
コンポーネントについては、ざっくりでも理解していないと何が何だかわからなくなるので、理解した方がいいと思います。
- Builder - buildpack・lifecycle・stackからなるビルドするために必要なコンポーネントを含んだイメージ
- Buildpack - ソースコードの種類を検出してビルドを実行する
- Buildpack Group - モジュール化されたbuildpackの集まり
- Lifecycle - buildpackの実行を管理し、イメージを作成する
- Platform - lifecycle・buildpack・ソースコードを使ってイメージを作成する
- 例: packコマンド、Tektonのbuildpackプライグイン、kpack
- Stack - ビルド用のイメージと実行用のイメージの組み合わせ
どんなことができるのか
もう少し詳しくCloud Native Buildpacksが、どんなことをできるのかBuildpackとBuilderをメインに紹介します。
Buildpack
BuildpackはDockerfileなしでソースコードからOCIイメージを作成できます。 Dockerfileなしでイメージの作成ができるため、Dockerfileのベストプラクティスに従ったりなどの管理の手間がなくなります。
公式ドキュメントより
Buildpackは2つのフェーズからイメージを作成します。
- Detectフェーズ - buildpackが使えるか判断し、使えるならBuildフェーズに進む
- Python buildpackの場合 -
requirements.txt
があるか、setup.py
があるか
- Python buildpackの場合 -
- Buildフェーズ - ビルド・実行用の環境の準備・依存関係の取得などをソースコードに対して実行
- Python buildpackの場合 -
pip isntall -r requirements.txt
を実行
- Python buildpackの場合 -
Detectフェーズで検知された形式(buildpack)でビルドするという流れになります。
公式ドキュメントより
Builder
Builderは、buildpack・lifecycle・stackなどのビルドに必要なコンポーネントを集めたイメージになります。
公式ドキュメントより
lifecycleがDetectフェーズで全てのbuildpackを使って、Buildフェーズで検知されたbuildpackを使ってビルドします。
実際に使ってみる
実際にCloud Native BuildpacksのPlatformの1つであるpack
コマンドを使ってイメージを作成してみます。
packのインストール
brewを使って、pack
コマンドをインストールします。
1brew install buildpacks/tap/pack
GitHub - buildpacks/pack: CLI for building apps using Cloud Native Buildpacks
CLI for building apps using Cloud Native Buildpacks - buildpacks/pack
Javaアプリケーションのイメージ作成
公式からサンプルアプリケーションが用意されているので、その中から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-maven
Builderを指定して、ビルドを実行します。
unknown link1pack 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 myapp
http://localhost:8080
にアクセスするとアプリケーションがしっかりビルドされて、イメージからコンテナが実行されたことが確認できます。
Dockerfileなしで、コマンド1つからイメージ作成ができました。
まとめ
- Cloud Native Buildpacksはソースコードからコンテナイメージを作成するツール
- Dockerfileなしでイメージを作成できる
参考
- Cloud Native Buildpacks · Cloud Native Buildpacks
- An App's Brief Journey from Source to Image · Cloud Native Buildpacks
- Concepts · Cloud Native Buildpacks
- Cloud Native Buildpacks
- buildpacks/pack: CLI for building apps using Cloud Native Buildpacks
- cnbs/sample-builder - Docker Image | Docker Hub