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 をインストール
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が表示されました。
だいぶ、駆け足でやっちゃいましたが後日見直そうと思います。