Google Cloud Shell は Cloud Registory に登録した Dockerイメージ をシェルとして利用できる。これをカスタム環境 [en]と呼ぶ。
カスタム環境の開発には Google Cloud Shell に予めインストールされているcloudshell env
コマンドが便利。
cloudshell env コマンドを使えば Cloud Shell 上で Dockerイメージをビルド、実行して試した後に GCP 上で自動ビルド、コンテナレジストリへのプッシュまでできる。
自動ビルド、デプロイには、Cloud Build と Cloud Source Repositories、Container Registory が使われる。
用意するもの
課金が有効になった Google Cloud Platform のプロジェクトが必要。
以下の API を有効にしておく。
- Cloud Source Repositories
- Cloud Build
- Container Registory
開発環境を作る
以下は Google Cloud Shell での作業。
# 現在のセッションにGCPプロジェクトを設定する $ gcloud config set project $PROJECT_ID $ cloudshell env create-custom-image $REPO_NAME $ cd $REPO_NAME
cloudshell env コマンドを実行するには、現在のセッションが GCPプロジェクトにログインしている必要がある。gcloud コマンドで現在のセッションを GCPプロジェクトにログインする。$REPO_NAME
は作成するカスタム環境の名前になる。
env create-custom-image
コマンドによって Git リポジトリが作成される
- Cloud Source Repositories に新規 Git リポジトリが作成される
- Cloud Shell の
~/$REPO_NAME
に クローンされて origin として設定される - Dockerfile と Cloud Build のビルド構成ファイルが含まれる
- Cloud Shell の
- Cloud Build に自動ビルドのトリガーが2つ作成される
- このリポジトリが更新で発火
- Goolgeが提供する Cloud Shell のベースイメージの更新で発火
作成されたことによって最初の自動ビルドが Cloud Build で実行される。ビルドが完了したら Container Registory にプッシュされる。ビルドの詳細は作成された cloudbuild.yaml に書かれている。
create-custom-image 以外の cloudshell env コマンドはこのリポジトリのディレクトリで実行する必要がある。
Cloud Shellの「環境構成.イメージの場所」を変更する
cloudshell env update-default-image
で Cloud Shellインスタンスの Dockerイメージの取得元をカスタム環境イメージに設定する。作業ディレクトリのコードから自動ビルド、プッシュされる先の Container Registory のパスは cloudshell env get-image-name
で表示できる。
Dockerfileを編集する
Dockerfile を編集したらcloudshell env build-local
してビルドできるか確認する。ビルドできたらcloudshell env run
でコンテナの中に入って内容を確認する、exit でコンテナからログアウトできる。
Dockerイメージを更新する
Cloud Source Repositories のリポジトリが origin として設定済みになっているので git push origin master
すれば自動ビルドが実行されて Dockerイメージが更新される。
cloudshell env push
を使えば cloudshell env build-local でビルドした Dockerイメージを直接 Container Registory にプッシュすることもできる。
料金
Container Registory が使用する Cloud Storage でイメージサイズに応じた料金がかかる。Cloud Shell のベースイメージが現時点で4.5GBなので最低でも月に13円ぐらいかかる。
Cloud Build が120分/日までは無料で使える。参考として、monoのランタイムだけを追加でインストールした場合、1回のビルドが10分以内に終了した。