Container Registry の概要

Container Registry は、Google Cloud 上で実行される非公開のコンテナ イメージ レジストリです。Container Registry は、Docker イメージ マニフェスト V2 と OCI イメージをサポートしています。

多くのユーザーは Docker 公開イメージを保存するための中央レジストリとして Dockerhub を使用しますが、イメージへのアクセスを制御するには、Container Registry などの非公開レジストリを使用する必要があります。

セキュアな HTTPS エンドポイントを使用して Container Registry にアクセスできるため、あらゆるシステム、VM インスタンス、所有のハードウェアからイメージを push、pull、管理できます。さらに、Docker 認証ヘルパー コマンドライン ツールを使用して、Docker を Container Registry で直接認証するように構成することもできます。

レジストリ名

Container Registry 内のレジストリは、ホストとプロジェクト ID によって命名されます。イメージを操作(push、pull、delete など)するには、次の形式を使用してイメージを識別します。

[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]

または

[HOSTNAME]/[PROJECT-ID]/[IMAGE]@[IMAGE_DIGEST]

ここで

  • [HOSTNAME] は、イメージが保存される場所です。

    • gcr.io は現時点では米国でイメージをホストしていますが、今後は場所が変更される可能性があります。
    • us.gcr.io は米国でイメージをホストしますが、その場所は、gcr.io によってホストされるイメージからは独立したストレージ バケットです。
    • eu.gcr.io は、欧州連合でイメージをホストします。
    • asia.gcr.io は、アジアでイメージをホストします。

    これらの場所は、Cloud Storage ストレージ バケットのマルチリージョンに対応します。イメージを新しいホスト名でレジストリに push すると、Container Registry では、指定されたマルチリージョン内にストレージ バケットを作成します。このバケットは、レジストリの基盤となるストレージです。1 つのプロジェクト内では、ホスト名が同じであるすべてのレジストリが 1 つのストレージ バケットを共有します。

  • [PROJECT-ID] は、Google Cloud Console プロジェクト ID です。プロジェクト ID にコロン(:)が含まれている場合は、下記のドメインをスコープとするプロジェクトをご覧ください。

  • [IMAGE] はイメージの名前です。イメージのローカル名とは別の名前にできます。Google Cloud Console では、プロジェクトのレジストリはイメージ名で一覧表示されます。各リポジトリでは、名前が同じである複数のイメージを保持できます。たとえば、名前が「quickstart-image」であるイメージの異なるバージョンを保持できます。

  • 末尾に :[TAG]@[IMAGE_DIGEST] のいずれかを追加すると、イメージの特定のバージョンを区別できますが、省略することもできます。タグまたはダイジェストを指定しなかった場合、Container Registry はデフォルトのタグ latest が付いたイメージを探します。下記のレジストリ内のイメージのバージョンをご覧ください。

たとえば、クイックスタートでのクイックスタート イメージのレジストリは gcr.io/[PROJECT-ID] です。イメージを push および pull するには次の形式を使用します。

gcr.io/[PROJECT-ID]/quickstart-image:tag1

[PROJECT-ID] は、Google Cloud Console プロジェクト ID です。

レジストリ内のイメージのバージョン

1 つのレジストリには多くのイメージを含めることができ、それらはバージョンの異なる場合があります。レジストリ内でイメージの特定のバージョンを識別するには、イメージのタグまたはダイジェストを指定します。タグはレジストリ内の 1 つのイメージに固有のものです。ダイジェストは自動的に生成されます。これは、イメージのバージョンに固有のものであり、@[IMAGE_DIGEST] の形式になります。[IMAGE_DIGEST] は、イメージ コンテンツの sha256 ハッシュ値です。

たとえば、クイックスタートで特定のバージョンのイメージを識別するには:

  • イメージのタグを追加します。

    gcr.io/[PROJECT-ID]/quickstart-image:tag1
    
  • または、イメージのダイジェストを追加します。

    gcr.io/[PROJECT-ID]/quickstart-image@sha256:4d11e24ba8a615cc85a535daa17b47d3c0219f7eeb2b8208896704ad7f88ae2d
    

[PROJECT-ID] は、Google Cloud Console プロジェクト ID です。プロジェクト ID にコロン(:)が含まれている場合は、下記のドメインをスコープとするプロジェクトをご覧ください。

Console の [イメージ] 画面で、[タグ] 列にイメージのタグが一覧表示されます。イメージのバージョンをクリックすると、メタデータ(イメージ ダイジェストを含む)が表示されます。

タグの変更方法については、イメージにタグを付けるをご覧ください。

ドメインをスコープとするプロジェクト

プロジェクトのスコープがドメインに設定されている場合、プロジェクト ID に含まれるドメインの名前の後にコロン(:)が続いています。Docker でのコロンの処理方法の関係で、Container Registry でイメージ ダイジェストを指定する場合は、コロン文字をスラッシュで置き換える必要があります。このようなプロジェクトのイメージを指定する場合は、次の形式を使用します。

[HOSTNAME]/[DOMAIN]/[PROJECT]/[IMAGE]

たとえば、ID が example.com:my-project のプロジェクトには、次のイメージが含まれる場合があります。

gcr.io/example.com/my-project/image-name

URL としてのレジストリ名

URL https://[HOSTNAME]/[PROJECT-ID]/[IMAGE] は、Cloud Console 内のそのレジストリの URL です。これらのリンクには、レジストリへのアクセス権限を持つ認証済みのユーザーがアクセスできます。レジストリ名の作成方法については、上記の説明をご覧ください。

たとえば、次の URL は Cloud Console 内の公開レジストリにリンクしています。

Container のイメージ形式

Container Registry は、Docker イメージ マニフェスト V2 と OCI イメージをサポートしています。

詳細については、Container のイメージ形式をご覧ください。

アクセス制御

Container Registry は自身と同じプロジェクト内の Cloud Storage バケットにコンテナ イメージのタグとレイヤファイルを格納します。バケットへのアクセスは、Cloud Storage の Identity and Access Management(IAM)で構成します。

デフォルトでは、プロジェクトのオーナーと編集者にプロジェクトの Container Registry バケットに対する push および pull 権限が付与されます。プロジェクト閲覧者にはイメージの pull 権限のみが付与されます。

詳細については、アクセス制御の構成をご覧ください。

Cloud Storage から高性能なバックエンド データベースへのイメージ メタデータの移動計画については、Container Registry 非推奨の予告をご覧ください。

認証

イメージを push または pull するには、その前に、認証を構成する必要があります。gcloud コマンドライン ツールを使用して Container Registry に対してリクエストを認証するように Docker を構成できます。Container Registry では、アクセス トークンまたは JSON 鍵ファイルを使用した高度な認証方式もサポートしています。

Docker 認証ヘルパー

Docker は、イメージを push および pull するために Container Registry にアクセスする必要があります。Docker 認証ヘルパー コマンドライン ツールを使用して、Docker で使用するための Container Registry 認証情報を構成できます。

認証ヘルパーは、Container Registry 認証情報を自動的に、または --token-source フラグで指定したロケーションからフェッチし、それらを Docker の構成ファイルに書き込みます。この方法で、Docker のコマンドライン ツール docker を使用して、Container Registry を直接操作できます。

詳細については、高度な認証をご覧ください。

Container Registry サービス アカウント

Container Registry API を有効にすると、Container Registry はプロジェクトにサービス アカウントを追加します。このサービス アカウントの名前は次の形式です。

service-[PROJECT_NUMBER]@containerregistry.iam.gserviceaccount.com

Container Registry サービス アカウントは、プロジェクトでサービスに関して必要な処理を実行するための Container Registry 専用のサービス アカウントです。Google はこのアカウントを所有していますが、これはプロジェクトに固有のアカウントであり、Cloud Console のサービス アカウントと IAM のセクションに表示されます。

このサービス アカウントを削除したり、その権限を変更したりすると、Container Registry の一部の機能は正常に動作しなくなります。役割を変更したり、アカウントを削除したりしないでください。

ミラー

mirror.gcr.io レジストリは、Docker Hub の公式リポジトリのグローバル Container Registry ミラーです。

ミラーにより、Docker Hub リポジトリの pull を高速化できます。mirror.gcr.io を使用すると、クライアントは最初に Container Registry ミラーから Docker Hub 公式イメージを pull しようとします。

詳細については、Container Registry と Docker Hub ミラーの使用をご覧ください。

通知

Pub/Sub を使用して、コンテナ イメージの変更に関する通知を受け取ることができます。

詳細については、Pub/Sub 通知の構成をご覧ください。

Google Cloud での Container Registry の使用

Compute Engine インスタンスと Google Kubernetes Engine クラスタは、インスタンスの Cloud Storage スコープに基づいて Container Registry イメージの push と pull を行います。Google Cloud での Container Registry の使用をご覧ください。

Container Registry に格納されているイメージは、App Engine フレキシブル環境にデプロイできます。

継続的デリバリー ツールの統合

Container Registry は、広く使用されているいくつかの継続的デリバリー システムと連動します。

サードパーティ ソリューションでの Container Registry の使用

アプリケーションの開発時に、Google Cloud 外部のサードパーティのクラスタ管理ソリューションや継続的インテグレーション ソリューションなどを使用できます。Container Registry は、これらの外部サービスと統合できます。

これらのソリューションでは、認証用の gcloud コマンドライン ツールにアクセスできない場合があります。その場合は、docker login を使用して Container Registry に対して直接認証を行うことができます。詳細については、高度な認証をご覧ください。

一部のサードパーティ ソリューション(Kubernetes など)では、Container Registry との統合のためのドキュメントが提供されています。

Container Registry と統合可能なサードパーティ ソリューションの完全なリストについては、継続的デリバリー ツールの統合をご覧ください。