Cloud Native Buildpacksについてざっくり理解する

スポンサーリンク

はじめに

Cloud Native Buildpacksについてざっくり解説し、実際に使ってどんなことができるか試してみたいと思います。

Cloud Native Buildpacksとは

Cloud Native Buildpacksとは、アプリケーションのソースコードからコンテナイメージ(OCIイメージ)を作成するツールです。

Cloud Native Buildpacks
CloudNativeBuildpackstransformyourapplicationsourcecodeintoimagesthatcanrunonanycloud.

元々はHerokuが開発したBuildpacksというツールから派生したツールになります。


公式ドキュメントより

コンポーネント

まずはCloud Native Buildpacksのコンポーネントについて紹介します。

コンポーネントについては、ざっくりでも理解していないと何が何だかわからなくなるので、理解した方がいいと思います。

  • Builder - buildpack・lifecycle・stackからなるビルドするために必要なコンポーネントを含んだイメージ
  • Buildpack - ソースコードの種類を検出してビルドを実行する
  • Buildpack Group - モジュール化されたbuildpackの集まり
  • Lifecycle - buildpackの実行を管理し、イメージを作成する
  • Platform - lifecycle・buildpack・ソースコードを使ってイメージを作成する
    • 例: packコマンド、Tektonのbuildpackプライグイン、kpack
  • Stack - ビルド用のイメージと実行用のイメージの組み合わせ
Components · Cloud Native Buildpacks

どんなことができるのか

もう少し詳しくCloud Native Buildpacksが、どんなことをできるのかBuildpackとBuilderをメインに紹介します。

Buildpack

BuildpackはDockerfileなしでソースコードからOCIイメージを作成できます。
Dockerfileなしでイメージの作成ができるため、Dockerfileのベストプラクティスに従ったりなどの管理の手間がなくなります。


公式ドキュメントより

Buildpackは2つのフェーズからイメージを作成します。

  • Detectフェーズ - buildpackが使えるか判断し、使えるならBuildフェーズに進む
    • Python buildpackの場合 - requirements.txtがあるか、setup.pyがあるか
  • Buildフェーズ - ビルド・実行用の環境の準備・依存関係の取得などをソースコードに対して実行
    • Python buildpackの場合 - pip isntall -r requirements.txtを実行

Detectフェーズで検知された形式(buildpack)でビルドするという流れになります。


公式ドキュメントより

Builder

Builderは、buildpack・lifecycle・stackなどのビルドに必要なコンポーネントを集めたイメージになります。


公式ドキュメントより

lifecycleがDetectフェーズで全てのbuildpackを使って、Buildフェーズで検知されたbuildpackを使ってビルドします。

実際に使ってみる

実際にCloud Native BuildpacksのPlatformの1つであるpackコマンドを使ってイメージを作成してみます。

packのインストール

brewを使って、packコマンドをインストールします。

brew install buildpacks/tap/pack
GitHub - buildpacks/pack: CLI for building apps using Cloud Native Buildpacks
CLIforbuildingappsusingCloudNativeBuildpacks-GitHub-buildpacks/pack:CLIforbuildingappsusingCloudNativeBuildpacks

Javaアプリケーションのイメージ作成

公式からサンプルアプリケーションが用意されているので、その中からJavaアプリケーションを利用します。

GitHub - buildpacks/samples: Samples for Cloud Native Buildpacks
SamplesforCloudNativeBuildpacks.Contributetobuildpacks/samplesdevelopmentbycreatinganaccountonGitHub.

cloneして、サンプルアプリケーションのディレクトリに移動します。

git clone https://github.com/buildpacks/samples
cd samples/apps/java-maven

Builderを指定して、ビルドを実行します。

Docker
pack build myapp --builder cnbs/sample-builder:bionic

イメージを確認すると作成されているのがわかります。

❯ docker image ls
REPOSITORY  TAG     IMAGE ID       CREATED         SIZE
myapp       latest  1685917a9047   42 years ago    300MB

作成したイメージを使ってコンテナを起動してみます。

docker run --rm -p 8080:8080 myapp

http://localhost:8080にアクセスするとアプリケーションがしっかりビルドされて、イメージからコンテナが実行されたことが確認できます。

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

まとめ

  • Cloud Native Buildpacksはソースコードからコンテナイメージを作成するツール
  • Dockerfileなしでイメージを作成できる

参考

タイトルとURLをコピーしました