Google Container Registryへのdockerイメージ配信

コンテナイメージのレジストリの1サービスに Google Container Registry(GCR)があり、非公開のプライベートレジストリをホストできます。
GKE(Google Kubernetes Engine)上のコンテナも、GCRにプッシュしたイメージから起動できます。

GCRへのメインの配信ルートは Cloud Buildでビルドすることです。

ほかに外部でビルドしたイメージをコピーする場合には、dockerを用います。GCRとのイメージのpush / pull は、dockerコマンドに統合されました。
以前はgcloud dockerという専用のコマンドがありましたが、gcloudコマンドはv196.0.0以降、dockerの認証ヘルパーに再整理されています。

196.0.0 (2018-04-04)
  Breaking Changes
**(Docker)** gcloud docker will not be supported for Docker client
        versions above 18.03. Please use gcloud auth configure-docker to
        configure docker to use gcloud as a credential helper; then, use docker
        as you would for non-GCR registries, e.g. docker pull
        gcr.io/project-id/my-image.
		
Container Registry
      ▪ Promoted gcloud auth configure-docker to GA.
      ▪ Modified container images add-tag to allow the specification of
        multiple destination tags.

以下のようにgcloud auth configure-dockerコマンドを実行すると、初期セットアップが完了します。
これにより、gcr.ioドメイン上のイメージの docker push / docker pull の際にgcloud経由で認証が行われます。

$ gcloud auth configure-docker
The following settings will be added to your Docker config file 
located at [~/.docker/config.json]:
 {
  "credHelpers": {
    "gcr.io": "gcloud", 
    "us.gcr.io": "gcloud", 
    "eu.gcr.io": "gcloud", 
    "asia.gcr.io": "gcloud", 
    "staging-k8s.gcr.io": "gcloud"
  }
}

docker-composeの設定ファイルにイメージのURIを記載すると起動時にpullしますが、gcloud認証のセットアップが完了していれば、gcr.ioのイメージもdocker-composeで起動できます。

Google Container Registryの外部環境でビルドしたイメージをpushしたい場合には、

$ docker build -t gcr.io/pj-name/container-name

または

$ docker tag original-image gcr.io/pj-name/container-name

のように、dockerコマンドでタグをつけます。

イメージプレフィクスの冒頭には、いずれかのgcr.ioドメイン、2番目のIDにはGCPのプロジェクト名を指定する必要があります。
また、docker pushするアカウントがGCPプロジェクトに適切なアクセス権限を持っていることも当然必要です。

中馬崇尋
Chuma Takahiro