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

2022.04.02
2024.03.24
コンテナ
Cloud Native Buildpacks

はじめに

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

Cloud Native Buildpacksとは

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

Cloud Native Buildpacks

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 - ビルド用のイメージと実行用のイメージの組み合わせ
unknown link

どんなことができるのか

もう少し詳しく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コマンドをインストールします。

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

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

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を指定して、ビルドを実行します。

Docker

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

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

1docker 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なしでイメージを作成できる

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee