📚
Cloud Run デプロイ方法 ~Artifact Registry編~
Cloud Run デプロイのイメージ
- Dockerfile --- bulid ---> Docker image
- Docker image --- push ---> Artifact Registry
- Artifact Registry --- deploy ---> Cloud Run

- buildコマンドで、Dockerイメージの作成。pushコマンドで、Artifact Registryに追加。deployコマンドで、Cloud Runに実装というイメージをもって、コマンドを使用してください。
- Dockerfileの作成が必要な方法と、作成しなくてもできる方法の2通りあります。
- Google CloudのArtifact Registryのページを確認しながらだと、イメージしやすいです。
作成環境
- Cloud Workstations (local環境でも、必要な権限があればできると思います)
- Container Registryよりも、Artifact Registryを利用することが推奨されています。詳しくは、Container Registry の概要 で確認してください。
- 今回のソースコードはGo言語で作成しました。他の言語でも可能と思います(多分...)。
変数の説明
- REGION = リポジトリのリージョン (us-central1, asia-northeast1 など)
- PROJECT_ID = Google Cloud Console プロジェクト ID
- REPOSITORY_NAME = Artifact Registryのリポジトリ名
- IMAGE = リポジトリのイメージ
- TAG = タグ
- IMAGE_PATH = Dockerイメージがある場所
注意点
- コマンド実行するディレクトリに注意してください。
- 必要な権限があるか確認してください。
Arifact Registry 作成
- Dockerイメージをいれるための、リポジトリを作成します。
- コマンドを使用せず、Google Cloudの画面上で作成することもできます。
-
Repository create
gcloud artifacts repositories create [REPOSITORY_NAME] --location=[REGION] --repository-format=docker --project=[PROJECT_ID] -
認証
gcloud auth configure-docker [REGION]-docker.pkg.dev
Cloud Run デプロイ①
- こちらのデプロイ方法は、Dockerfileが必要です。
- pushコマンド後、DockerイメージがArtifact Registryに保存できれば、Google Cloudの画面上で、Clour Run以外にも、GKE、GCEへデプロイが可能になります。
-
build (Dockerfile -> Docker image)
docker build -t [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG] . -
push (Docker image -> Artifact Registry)
docker push [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG] -
delpoy (Artifact Registry -> Cloud Run)
-
サブネットを使う場合は、リージョンはVPCサブネットと同じものを選択する
gcloud run deploy --image [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG] --platform=managed --project=[PROJECT_ID] -
例
docker build -t us-central1-docker.pkg.dev/my-project/my-repository/my-image:v1.0 . docker push us-central1-docker.pkg.dev/my-project/my-repository/my-image:v1.0 gcloud run deploy --image us-central1-docker.pkg.dev/my-project/my-repository/my-image:v1.0 --platform=managed --project=my-project
変数利用バージョン
- 変数宣言さえすれば、2,3はコピペでできます
-
変数の設定
REGION="[REGION]" PROJECT_ID="[PROJECT_ID]" REPOSITORY_NAME="[REPOSITORY_NAME]" IMAGE="[IMAGE]" TAG="[TAG]"REGION="us-central1" PROJECT_ID="my-project" REPOSITORY_NAME="my-repository" IMAGE="my-image" TAG="v1.0" -
IMAGE_PATH の定義 (変数名はなんでもいいです)
IMAGE_PATH="$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY_NAME/$IMAGE" -
コマンドの実行
- 上2行はリポジトリ作成です。必要に応じて、追加・削除してください。
gcloud artifacts repositories create $REPOSITORY_NAME --location $REGION --repository-format docker --project=$PROJECT_ID gcloud auth configure-docker $REGION-docker.pkg.dev docker build -t $IMAGE_PATH/$TAG . docker push $IMAGE_PATH:$TAG gcloud run deploy --image $IMAGE_PATH:$TAG --platform=managed --project=$PROJECT_ID
Cloud Run デプロイ②
- こちらのデプロイ方法は、Dockerfileは不必要です。
- Buildpacksを利用し、コンテナイメージを自動的に作成してくれます。(packコマンド利用には、インストールが必要になります)
-
build
pack build [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE] --builder gcr.io/buildpacks/builder -
tag
- packコマンドはtagを付けることができないので、tagコマンドでtagを付けます
docker tag [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE] [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG] -
push (Docker image -> Artifact Registry)
docker push [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG] -
delpoy (Artifact Registry -> Cloud Run)
gcloud run deploy --image [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG] --platform=managed --project=[PROJECT_ID]
-
例
pack build us-central1-docker.pkg.dev/my-project/my-repository/my-image --builder gcr.io/buildpacks/builder docker tag us-central1-docker.pkg.dev/my-project/my-repository/my-image us-central1-docker.pkg.dev/my-project/my-repository/my-image:v1.0 docker push us-central1-docker.pkg.dev/my-project/my-repository/my-image:v1.0 gcloud run deploy --image us-central1-docker.pkg.dev/my-project/my-repository/my-image:v1.0 --platform=managed --project=my-project
変数利用 バージョン
-
変数の設定
REGION="[REGION]" PROJECT_ID="[PROJECT_ID]" REPOSITORY_NAME="[REPOSITORY_NAME]" IMAGE="[IMAGE]" TAG="[TAG]"REGION="us-central1" PROJECT_ID="my-project" REPOSITORY_NAME="my-repository" IMAGE="my-image" TAG="v1.0" -
IMAGE_PATH の定義
IMAGE_PATH="$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY_NAME/$IMAGE" -
コマンドの実行
gcloud artifacts repositories create $REPOSITORY_NAME --location=$REGION --repository-format=docker --project=$PROJECT_ID gcloud auth configure-docker $REGION-docker.pkg.dev pack build $IMAGE_PATH --builder gcr.io/buildpacks/builder docker tag $IMAGE_PATH $IMAGE_PATH:$TAG docker push $IMAGE_PATH:$TAG gcloud run deploy --image $IMAGE_PATH:$TAG --platform=managed --project=$PROJECT_ID
参考資料
Discussion