はじめに
この記事では、Google Cloud の Cloud Build を使って Docker image をビルドする方法と、ビルドしたイメージを Artifact Registry へpushする手順について述べます。
この記事のコードは次の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でビルドが開始され、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.