公式ドキュメントにもしっかりあるし、みんなデフォルトでやってるかもしれないけど、すごく早くなったのでご紹介。

ビルドを高速化する際のおすすめの方法  |  Cloud Build のドキュメント  |  Google Cloud

今まではCloud BuildでCloud Runにデプロイするときにでdockerイメージをbuildするところを下記のようにしてたんですが、

  - id: Build
    name: gcr.io/cloud-builders/docker
    args: ['build',
           '-t', 'asia.gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA',
           '-t', 'asia.gcr.io/$PROJECT_ID/$REPO_NAME:latest',
           '.',
           '-f', 'Dockerfile']

そこの前に下記のように前回最後にbuildしたイメージを取ってくるようにして、build時に--cache-fromを入れると良い感じに前回のイメージを使ってくれる。

  - id: Fetch
    name: gcr.io/cloud-builders/docker
    entrypoint: 'bash'
    args: ['-c', 'docker pull asia.gcr.io/$PROJECT_ID/$REPO_NAME:latest || exit 0']
  - id: Build
    name: gcr.io/cloud-builders/docker
    args: ['build',
           '-t', 'asia.gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA',
           '-t', 'asia.gcr.io/$PROJECT_ID/$REPO_NAME:latest',
           '--cache-from', 'asia.gcr.io/$PROJECT_ID/$REPO_NAME:latest',
           '.',
           '-f', 'Dockerfile']

24分ぐらいかかってたのが4分になって嬉しい。

Google Container RegistryはプライベートなDocker Registryです。Docker HubのPrivateは有料なので受託開発でGCPつかうならアップ場所はここがよい。

GCPにログインして、デフォルトのPROJECT_IDは設定しておく。

$ gcloud auth login
$ gcloud config set project PROJECT_NAME_12345

イメージにタグを付ける。タグ名はリージョン/プロジェクトID/イメージ名

リージョンは日本ならasia.gcr.ioがよい。

$ docker tag xxxxxxx asia.gcr.io/PROJECT_NAME_12345/MY_IMAGE

pushする。

$ gcloud docker push asia.gcr.io/PROJECT_NAME_12345/MY_IMAGE

Google Container Registryに管理画面でアップされていることを確認する。