コンテンツに移動
Containers & Kubernetes

お知らせ: Google Cloud の Buildpacks でコンテナ イメージ作成が簡単に

2020年10月16日
Google Cloud Japan Team

※この投稿は米国時間 2020 年 10 月 10 日に、Google Cloud blog に投稿されたものの抄訳です。

新しいアプリケーションを構築する開発者が集中して取り組むべきなのは、コードの記述であって、コンテナ化ではありません。また、すでにコンテナを使用している開発者であれば、適切で安全なコンテナ イメージの作成がどれだけ複雑で時間のかかる作業かということをご存じでしょう。そこで本日、安全かつ本番環境ですぐに使えるコンテナ イメージを、Dockerfile がなくてもソースコードからすばやく簡単に作成できるオープンソースのテクノロジー、Buildpacks を Google Cloud 全体で幅広くサポートする体制が整いましたことをお知らせいたします。

このリリースの目玉は、なんといってもオープンソースの Buildpacks とビルダーです。CNCF の Buildpacks V3 仕様をベースにした Buildpacks を使えば、ベスト プラクティスに従って Google Cloud のすべてのコンテナ プラットフォーム(Cloud Run(フルマネージド)、Anthos、Google Kubernetes Engine(GKE))で実行するのに適したコンテナ イメージを作成できます。こうした Buildpacks は本番環境で強化およびテスト済みであり、3 月以降 App Engine や Cloud Functions で実行されたビルドの大半で大規模に使用されてきました。

Buildpacks の使用

Buildpacks は複数の使い方ができます。1 つ目はコンテナ化を完全に導入していない場合で、Buildpacks を採用して最新のコンテナのランタイムと配信プラットフォームを利用するという方法です。また、Dockerfile を見つけて適切に処理しカスタマイズする時間がないといった、お急ぎのプロジェクトに対処する場合にも便利です。

Google Cloud Buildpacks は今すぐお試しいただけます。[Google Cloud で実行] ボタンをクリックするだけで、Go プロジェクト、Buildpacks、Cloud Run を使ってソースから完全なデプロイを実行できます。

アプリケーションを使用してローカルで Buildpacks を試す場合は、Docker「パック」CLI ツールをインストール してから次のコマンドを実行します。

読み込んでいます...

(Go、Java、Node、Python、Net がサポートされています。適切にビルドするために追加構成が必要になることがあります)。

インストールを希望しない場合は、Cloud Build で Buildpacks ベースのビルドを実行してから Cloud Run にデプロイすれば簡単です。

読み込んでいます...

Buildpacks の仕組み

Buildpacks はビルダーと呼ばれる OCI イメージで配信され実行されます。各ビルダーには 1 つ以上の Buildpacks を含めることができます。本日リリースする Google Cloud Buildpacks のビルダーは gcr.io/buildpacks/builder から利用できます。

ビルダーにはソースコード言語を自動検出する機能が備わっています。これは、Buildpack 内の「bin/detect」実行可能ファイルで実行されます。検出スクリプトが決まった順序で呼び出され、ビルドが適切な数の Buildpacks を受け取ると停止します。たとえば、Node.js Buildpacks のほとんどは、packages.json ファイルの有無を確認するようになっています。使用する Buildpack を手動で指定して、この自動検出手順をスキップすることもできます。

Buildpack が選択されると、「bin/build」を実行します。このスクリプトはソースコードを実行可能なアーティファクトに変換し、通常は依存関係のインストールやコードのコンパイルなどのアクションを行います。

次に、このビルドステップの出力が「実行」OCI ベースのイメージに追加され、選択したプラットフォームで実行できる最終的なコンテナ イメージが作成されます。

Google Cloud Buildpacks

Google Cloud の Buildpacks はセキュリティと速度、再利用性が最適化されています。また、コンテナ イメージにはアプリ関数の両方を組み込めるようになっています。関数を作成する場合、Buildpacks では Google Cloud のオープンソース Functions Framework を使って関数をパッケージ化します。

Google Cloud Buildpacks では、マネージド ベースの Ubuntu 18.04 ベースイメージを使用して、定期的にセキュリティ脆弱性のスキャンを実行します。脆弱性が検出された場合は自動パッチ適用します。これにより、Buildpacks を使用してソースコードをビルドする際に可能な限り安全性が確保されるようになります。

Google Cloud Buildpacks はまた、システム パッケージの追加や開発チームの特定のニーズに応えるためにカスタマイズすることもできます。

Buildpacks 自体はすべて Go で記述されているので、言語ごとに単体の Buildpack を作成するのではなく、小さなモジュール式の Buildpacks をいくつか組み合わせることが可能です。たとえば、NPM Buildpack では(当然ですが)ノード パッケージをインストールします。これはもちろん、Node.js ビルドに使用しますが、NPM パッケージを使用する、他の言語やフレームワーク(Ruby on Rails など)にも使用できます。

Google Cloud での幅広いサポート

Google Cloud ではオープンソースの Buildpacks だけでなく、さまざまな Google プロダクトで Buildpacks をサポートしています。

  • Cloud Build では gcloud CLI ツール(gcloud alpha builds submit --pack image=gcr.io/[project-id]/my-app)を通じて Buildpacks をネイティブにサポートできるようになりました(ドキュメントをご参照ください)。

  • Cloud Run - Cloud Run への継続的デプロイ(Cloud Build トリガー使用)で Buildpacks を使用するよう構成できます(ドキュメントをご参照ください)。

  • App Engine - ほとんどの新しい App Engine ランタイムにおけるソースデプロイ用のデフォルト メカニズムに Buildpacks を採用しました。特に、Buildpacks を使えばソースベースの Java デプロイが可能になります(これまでは JAR ベースのデプロイのみに対応していました)。今後新しくリリースされるすべてのランタイムには、Buildpacks を使用します。

  • Cloud Functions - App Engine と同じく、デプロイされた関数のビルドには Buildpacks をデフォルト メカニズムとして採用します。

  • Cloud Code - Cloud Code IDE で Buildpacks を使用してソースコードを構築し、作成されたコンテナを直接 GKE にデプロイできます。

  • Skaffold で Buildpacks を使ったリアルタイム デプロイをサポートします。ソースコードを編集すると、Buildpacks で継続してアプリを再構築できるので、アプリのローカル インスタンスで変更をプレビューできます。

  • Cloud Shell - パック CLI ツールがデフォルトで Cloud Shell にインストールされるようになりました。これにより、追加パッケージをインストールしなくても、Cloud Shell で Buildpacks を実行できるようになります。

Video Thumbnail

使ってみる

Google Cloud の Buildpacks についての詳細はGitHub リポジトリ で確認してください。その後、ボタンをクリックすれば、Buildpacks を使用してアプリサンプルをデプロイできます。


-プロダクト マネージャー Matthew Soldo

-プロダクト マネージャー Steren Giannini

投稿先