📚
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の画面上で作成することもできます。
-
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へデプロイが可能になります。
-
docker build -t [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG] .
-
docker push [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG]
-
-
サブネットを使う場合は、リージョンは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="$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コマンド利用には、インストールが必要になります)
-
pack build [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE] --builder gcr.io/buildpacks/builder
-
- 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]
-
docker push [REGION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE]:[TAG]
-
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="$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