コンテナのコンセプト

このドキュメントでは、レジストリ、リポジトリ、アーティファクトなど、コンテナ イメージに関連した重要なコンセプトについて説明します。これらのコンセプトが Artifact Registry と Container Registry にどのように適用されるかに関する基本情報も含まれています。

このページの Artifact Registry の例では、主に Docker 形式と gcr.io リポジトリを参照しています。詳細については、 サポートされている形式リポジトリの概要をご覧ください。

レジストリ

レジストリでは、リポジトリ内で名前ごとにまとめられたコンテナ イメージとアーティファクトを保存し、配布しています。レジストリには、単一のリポジトリでも複数のリポジトリでも含めることができます。また公開することも非公開にすることもできます。

Docker Hub や Artifact Registry などのレジストリ サービスには、公開リポジトリまたは非公開リポジトリを作成するオプションが用意されています。公開イメージを pull する場合は、セキュリティに関するあらゆる懸念を理解することが重要です。脆弱性の モニタリングと依存関係のフットプリントの削減の詳細については、 依存関係の管理をご覧ください。

レジストリは、個々のコンテナ イメージを格納するリポジトリにまとめられます。Artifact Registry を使用すると、単一の プロジェクト内に複数のリポジトリを作成し、各リポジトリに特定のリージョンまたはマルチ リージョン ロケーション を関連付けることができます。関連するリポジトリはラベルでグループ化できます。

Artifact Registry リポジトリとイメージ管理

Artifact Registry Docker 形式のリポジトリでは、同じリポジトリに名前の異なる複数のコンテナ イメージを保存できます。イメージの各バージョンはイメージ ダイジェストで識別され、タグに関連付けることができます。タグは可変または不変にできます。コンテナ イメージの バージョンとタグの詳細については、コンテナ イメージのバージョンをご覧ください。

Artifact Registry では通常、プロジェクト、リージョンまたはマルチリージョンのロケーション、 イメージの名前を識別するためにイメージのパスの一部を参照し、 タグまたはマニフェスト ダイジェスト を使用して正しいバージョンを識別します。

例:

docker push us-west1-docker.pkg.dev/PROJECT/quickstart-docker-repo/quickstart-image:tag1

  • us-west1 は、リポジトリの場所です。
  • docker.pkg.dev は Docker 形式のリポジトリのホスト名です。
  • PROJECT は、 Google Cloud プロジェクト ID によって作成された Namespace です。
  • quickstart-docker-repo は、イメージを保存するプロジェクトの Namespace です。Artifact Registry では、パスのこの部分をリポジトリと呼んでいます。
  • quickstart-image は、quickstart-image のすべてのバージョンの名前であり、多くの場合はイメージと呼ばれています。
  • tag1 は、イメージのバージョンを指定するタグです。

画像

アーティファクトとイメージはどちらも Artifact Registry 内に保存できます。アーティファクトは、テキスト ファイル、Docker イメージ、Helm チャートなど、さまざまなものがありますが、イメージは通常、コンテナ イメージを指します。コンテナ イメージは、あらゆる環境で実行するために必要なすべての要素を含むソフトウェアのパッケージです。詳細については、 コンテナとはをご覧ください。

イメージがリポジトリに push またはアップロードされ、リポジトリから pull またはダウンロード されます。正しいイメージとバージョンを指定するには、一意のレジストリとアーティファクトを指定する必要があります。

Artifact Registry のリポジトリ名とイメージ名の詳細については、 リポジトリとイメージ名をご覧ください。

レイヤ

リポジトリに保存されるコンテナ イメージは、レイヤを使用して段階的に作成されます。一部の同じレイヤは異なるイメージで使用できます。レイヤはイメージのタイプに応じてさまざまな方法で定義されます。たとえば、Dockerfile の各命令は Docker イメージ内のレイヤに対応します。レジストリ内では、共通レイヤを持つイメージがこれらのレイヤを共有するため、ストレージ効率が向上します。 セキュリティ上、異なるレジストリ間でレイヤが共有されることはありません。

コンテナ イメージを削除しても、レイヤがすぐに削除されるわけではありません。レジストリ内のイメージで参照されていないレイヤは毎日削除されます。

タグ

ユーザーは、イメージをリポジトリに push または pull するときにイメージのバージョンを指定するためにタグを追加します。イメージには 1 つまたは複数のタグを含めるか、タグをまったく含めません。 可変タグを使用しているときに、同じタグでイメージを 2 回 push すると、タグは最初のイメージから削除されて 2 番目のイメージに移り、最初のイメージはタグなしで残されます。タグ付けされていないイメージには、 マニフェストダイジェストを使用してアクセスできます。

不変タグを使用している場合、次の操作は許可されません。

  • タグ付きイメージを削除する。タグ付けされていないイメージの削除はこれまで通り可能です。
  • タグをイメージから削除する。
  • リポジトリ内の別のバージョンのイメージですでに使用されているタグを使用してイメージを push する。

latest タグは、タグなしでイメージが push されたときに追加される特殊なタグです。

例:

docker push us-west1-docker.pkg.dev/my-project/my-repo/hello-app

このコマンドで hello-app:latest にイメージが push されます。

docker pull us-west1-docker.pkg.dev/my-project/my-repo/hello-app

このコマンドでイメージ hello-app:latest が pull されます。

latest 以外のタグが付いたリポジトリにイメージが push されるときに、latest タグが追加されないため、latest イメージが最新の変更より古い場合があります。リリースには latest 以外のタグを使用することをおすすめします。

マニフェスト

イメージ マニフェストは、各イメージ内のレイヤを一意に識別および指定します。マニフェストは、マニフェスト ダイジェストと呼ばれる一意の SHA-256 ハッシュで識別されます。 マニフェスト ダイジェストはタグよりも信頼性と安全性が高くなります。これは、可変タグを含むリポジトリでは、同じイメージの複数のバージョンが同じタグに push され、一部のイメージはタグなしで残されますが、各イメージがマニフェスト ダイジェストで一意に指定されるためです。

ツールを使用してイメージをスキャンまたは分析する場合、これらのツールの結果はスキャンされたイメージに対してのみ有効です。タグで参照されるイメージは変更される可能性があるため、確実にスキャンされたイメージをデプロイするには、タグを使用することはできません。

Artifact Registry 固有のタグ付けとマニフェストの詳細については、 イメージの管理コンテナ イメージの使用をご覧ください。

イメージのプリウォーミング

イメージ ストリーミングを使用するレイテンシの影響を受けやすいアプリケーションの場合、新しいノードまたはインスタンスでイメージが初めて pull されるのを待つと(コールド スタートと呼ばれる)、不要な遅延が発生する可能性があります。プリウォーミング を使用すると、イメージがリクエストされる前に、イメージ ストリーミング キャッシュへのイメージのダウンロードを明示的に開始できます。このプロセスにより、GKE クラスタがイメージをリクエストしたときに、イメージを迅速に配信できるようになります。

イメージをプリウォーミングするには、Artifact Registry API を使用します。手順については、 イメージのプリウォーミングでレイテンシを短縮するをご覧ください。

次のステップ