【Google Cloud (GCP)】Cloud BuildでビルドしArtifact Registryへpushする方法

プログラミング

はじめに

この記事では、Google Cloud の Cloud Build を使って Docker image をビルドする方法と、ビルドしたイメージを Artifact Registry へpushする手順について述べます。

この記事のコードは次のGitHubで利用することができます。

GitHub - Joichiro433/Blog-gcp-cloudbuild
Contribute to Joichiro433/Blog-gcp-cloudbuild development by creating an account on GitHub.

Artifact Registryのリポジトリを作成する

まずは、Docker imageのpush先となるArtifact Registryのリポジトリを作成します。

今回作成するリポジトリは、docker-repo という名前のdocker専用のリポジトリとします。次のコマンドでリポジトリが作成できます。

$ gcloud artifacts repositories create docker-repo \
    --repository-format docker \
    --location asia-northeast1 \
    --description "Docker repository"

また、次のコマンドでArtifact Registry 認証情報も付与しておきます。

$ gcloud auth configure-docker asia-northeast1-docker.pkg.dev

以上で、Artifact Registryのリポジトリ作成は完了です。次のコマンドでリポジトリが作成されたことを確認できます。

$ gcloud artifacts repositories list
## 出力
REPOSITORY   FORMAT  DESCRIPTION        LOCATION         LABELS  ENCRYPTION          CREATE_TIME          UPDATE_TIME
docker-repo  DOCKER  Docker repository  asia-northeast1          Google-managed key  ****-**-**T**:**:**  ****-**-**T**:**:**

Cloud Build でビルドし、Artifact Registryにpushする

必要なファイルを用意する

Cloud Build でdocker imageをビルドするために必要な下記の3つのファイルを用意します。

今回ビルドするdocker imageは、 "Hello, world" を出力するだけの簡単なものとしました。

.
├── cloudbuild.yaml
├── dockerfile
└── hello.sh

hello.sh

hello.sh"Hello, world" を出力するだけのスクリプトです。

#!/bin/bash

echo "Hello, world! The time is $(date)."

また、hello.sh に実行権限を付与しておきます。

$ chmod +x hello.sh

dockerfile

dockerfile は次の内容で、 hello.sh を実行します。

FROM ubuntu
COPY hello.sh /
CMD ["/hello.sh"]

cloudbuild.yaml

cloudbuild.yaml は Cloud Build でビルドを開始するためのビルド構成ファイルです。

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'asia-northeast1-docker.pkg.dev/${PROJECT_ID}/docker-repo/hello-image:v1.0.0', '.' ]
images:
- 'asia-northeast1-docker.pkg.dev/${PROJECT_ID}/docker-repo/hello-image:v1.0.0'
  • ビルド時に、Cloud Build が自動的に ${PROJECT_ID} をプロジェクト ID に置き換えます。
  • images フィールドにはpush先のArtifact Registryリポジトリ + docker imageの名前 を記載します。

ビルド構成ファイルの詳細はこちら▼で確認できます。

ビルド構成ファイルのスキーマ  |  Cloud Build のドキュメント  |  Google Cloud

コマンドを実行する

次のコマンドを実行すると、Cloud Buildでビルドが開始され、Artifact Registryにイメージがpushされます。

$ gcloud builds submit \
    --region asia-northeast1 \
    --config cloudbuild.yaml

以上で、Cloud BuildのビルドとArtifact Registryへのpushは完了です。次のコマンドでイメージがリポジトリにpushできたことを確認できます。

# {YOUR_PROJECT}を自身のプロジェクトidに置き換えてください
$ gcloud artifacts docker images list asia-northeast1-docker.pkg.dev/{YOUR_PROJECT}/docker-repo/hello-image
## 出力
IMAGE                                                                DIGEST                                                                   CREATE_TIME          UPDATE_TIME
asia-northeast1-docker.pkg.dev/your-project/docker-repo/hello-image  sha256:35d9b21dfac7c62d9c6d775e563e67bc80e32e0989a633465299681e863cacd4  ****-**-**T**:**:**  ****-**-**T**:**:**

Artifact Registryの Dockerイメージを実行する

ビルドしたイメージが想定どおりに動作することを確認するために、Dockerを使用してArtifact Registryのイメージを実行できます。

# {YOUR_PROJECT}を自身のプロジェクトidに置き換えてください
$ docker run asia-northeast1-docker.pkg.dev/{YOUR_PROJECT}/docker-repo/hello-image:v1.0.0
## 出力
Hello, world! The time is Sun Jan 15 07:11:43 UTC 2023.

タイトルとURLをコピーしました