Buildpackを使用してCloud Runを作成

Cloud Runとは?

Cloud Run は、Google Cloud(GCP)上でコンテナを直接実行できるサービスです。

よろしければ、こちらもどうぞ

Dockerについて

Dockerを勉強しようとして、最初につまづくと思われるファイル

それぞれのファイル自体が決して必須というわけではなく、あくまで「あると毎回実行する面倒な操作が簡単になるよ」ってことみたいです。

Dockerfile

  • コンテナの定義ファイル
    • 使用する言語、ライブラリ、環境変数などの定義
  • 複数のコンテナの定義も可能

docker-compose.yml

  • 複数のコンテナで構成されている場合の各イメージのビルド、停止、ネットワーク接続の設定などを定義

ただ、今回はBuildpackという機能を使えば上記のようなファイルは不要で、
Cloud Runを構築できるということなので、そちらでCloud Runを構築してみたいと思います。

Buildpackとは?

Google CloudでいうBuildpackとは、アプリケーションのソースコードを取得して実行可能なように変換してくれるらしいです。(公式ドキュメントはこちら

Buildpackを使用してコンテナイメージをビルドするには、以下の2つの方法があるみたいです。

  • pack CLI を使用してローカルでビルド
  • Cloud Buildを使用してGoogle Cloud(GCP)環境でのビルド

それぞれ試していきたいと思います。

pack CLI を使用してローカルでビルド

事前準備

Docker Community Edition(CE)をローカル環境にインストール

まずはこちらから実行していきます。

こちらに遷移して、お使いの環境に合わせたものを選択してインストール
(私は既にインストール済みだったので画面ショット等は省略させていただきます。)

Pack CLI をインストール

こちらの手順に沿ってインストールしていきます。

私はMacなので、MacのHomebrewを使用して手順でいきます。

brew install buildpacks/tap/pack

↑で無事、インストールが完了したら続いてシェルの設定
私はbashでいきます。

vim ~/.bashrc

上記で.bashrcを開き

. $(pack completion)

↑の1行をファイルに追加します。

ローカルでビルド

とりあえず、サンプルソースをダウンロードします。

git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git

ダウンロードしたソースの中にディレクトリ移動
私はpythonのサンプルを選択します。

cd buildpack-samples/sample-python

ビルドコマンド実行

pack build --builder=gcr.io/buildpacks/builder sample-python

ここで、以下のようなエラーが出ました。

ERROR: failed to build: failed to fetch builder image 'gcr.io/buildpacks/builder:latest': Cannot connect to the Docker daemon at unix:///Users/〜/.docker/run/docker.sock. Is the docker daemon running?

dockerが起動していないことが原因っぽいので、以下のコマンドを実行してdockerを起動
普通にインストールしたdockerアイコンから起動

再度「pack build〜」を叩くとうまく実行できました。
ちなみに、このビルドはマシンスペックにもよると思いますが、私は数分かかりました。
「Successfully built image sample-python」のメッセージが表示されれば成功。

ビルドしたイメージを実行

docker run -it -ePORT=8080 -p8080:8080 sample-python

以下のようなメッセージが表示されます。

[2024-11-10 12:52:03 +0000] [1] [INFO] Starting gunicorn 20.1.0
[2024-11-10 12:52:03 +0000] [1] [INFO] Listening at: http://0.0.0.0:8080 (1)
[2024-11-10 12:52:03 +0000] [1] [INFO] Using worker: gthread
[2024-11-10 12:52:03 +0000] [11] [INFO] Booting worker with pid: 11

この状態で、http://localhost:8080にアクセスすると
「hello, world」が表示されます。

Cloud Buildを使用してGoogle Cloud(GCP)環境でのビルド

Artifact Registry の Docker リポジトリを使用可能な状態にする

※この手順は、もしかしたら不要かもなのでスキップしてもらって、「Cloud Runにデプロイ」を試してみてエラーになったら戻るでもいいかもしれません。

まずは、Dockerコンテナの保管場所であるArtifact Registryを使用可能な状態にします。

こちらにアクセスしてAPIを有効化

プロジェクトの確認画面で「次へ」をクリック

次の画面で「有効にする」をクリック

これでArtifact Registryが有効になりました。

Docker リポジトリを作成

続いてDockerリポジトリを作成します。

こちらのページにアクセスして、「Artifact Registry」のページを開きます。

ここで画面上部の「+」をクリックして、リポジトリを作成します。

任意の名前とリージョンを選択し、後はデフォルトのままで「作成」をクリックします。

これでDockerコンテナの保管場所は完成です。

Cloud Runにデプロイ

Cloud Buildを使用したCloud Runへのデプロイについてはこちらもよかったらご覧ください。

先ほどのローカルにダウンロードしたファイルのpythonのサンプルソース部分だけ切り取って、
↓のcloudbuild.yamlを追加、githubにアップします。

projectId: <プロジェクトID>
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: gcloud
  args:
  - run
  - deploy
  - sample-python ※Cloud Run名
  - --region=<リージョン>
  - --allow-unauthenticated
  - --source=.
options:
 logging: CLOUD_LOGGING_ONLY

このyamlファイルの中で、「pack build〜」とかしてイメージを一旦作成しないといけないのかと思ってたのですが、↑の内容だけでいけるみたいです。

もしかしたら…先ほどやったArtifact Registryの設定は不要な可能性もあります…

Cloud Buildに以下の内容でトリガを作成

こんな感じです。

これでトリガを実行するとCloud Runに「sample-python」が作成されて

URLにアクセスすると

hello worldが表示されました。

だいぶ、駆け足でやっちゃいましたが後日見直そうと思います。

コメントする