Container BuilderでDockerイメージをビルド

Google Container Builderは、CI/CDをホストするサービスです。
Container Registryと統合されており、GKEで動作させるdockerイメージをビルドする用途に適しています。

Container Builderは日ごとの無料枠を提供しているため、実験的な小規模ビルドであれば無料枠におさまるでしょう。コスト面では長期運用した際にContainer Registry側でかかるストレージコストを多少意識した方が良いでしょう。
実運用の際には旧世代のイメージを削除する操作がおそらく必要です。

また、docker buildコマンドをホストしているため、ビルド過程の大半はdockerのビルドプロセスと同じです。

用意するもの

  • gcloudコマンド(Google Cloud SDK) & GCPアカウント
  • dockerイメージビルド用リソース(Dockerfileなど、docker buildと同じもの)
  • YAML形式のビルド設定ファイル

既存のdockerビルドリソースを移行する場合、YAML設定ファイルを追加作成するだけで利用開始できるケースも多くありそうです。

ビルド設定ファイル

dockerイメージをビルドするためのビルドステップの定義は、以下のような形式になります。

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/project-name/image-name', '.']
images: ['gcr.io/project-name/image-name']

steps.nameはContainer Builderが実行するイメージです。dockerのビルドにはgcr.io/cloud-builders/dockerを用います。
steps.argsは、コマンドライン引数です。gcr.io/cloud-builders/dockerイメージがdockerコマンドを提供しているため、この例の組み合わせではdocker build -t gcr.io/project-name/image-name .がContainer Builder上で実行されます。

Dockerfileなど.が指すリソースは、後述のgcloud container buildsコマンドで転送します。

imagesはContainer Registryにプッシュするイメージを指定します。この項に設定したイメージはGKEで実行可能です。また、asia.gcr.ioなどのgcr.ioファミリーも指定可能です。

キャッシュを利用する

Container Builderはデフォルト指定ではDockerイメージビルドにキャッシュを利用せず、毎回すべてのレイヤを新規ビルドします。
キャッシュを利用するためには、--cache-fromオプションをargsに追加します。
詳細な書式は、公式ドキュメントのビルドの高速化を参照してください。

キャッシュで注意すべき点として、初回ビルド時にはContainer Registryにキャッシュが存在していないためエラーになることです。少なくとも一度は--cache-fromオプションを指定せずにビルドしておく必要があります。

gcloud container buildsコマンド

ビルド実行は、gcloud container builds submit ./ --config build-step.yaml のようにgcloudコマンドで指定すると即開始します。

configオプションには先ほど作成したyamlファイルを指定します。
また、Dockerfileなどビルドに必要なリソースは、引数としてディレクトリを指定します。この例では、./のとおりカレントディレクトリに存在しているファイル一式を圧縮・転送します。

DockerfileのCOPYディレクティブなども、ここで転送したリソースを利用可能です。
転送除外したいファイルは.gcloudignoreファイルで指定できますが、転送したいリソースだけを単にサブディレクトリに整理しておく手もあります。

その他のオプションは公式リファレンスを参照してください。