コンテナのコンセプト

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

レジストリ

レジストリは、リポジトリ内で名前別に整理されたコンテナ イメージとアーティファクトを保存し、配布します。レジストリには単一のリポジトリまたは複数のリポジトリが含まれ、一般公開または限定公開になります。

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

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

リポジトリ

名前が同じでタグが異なるイメージやアーティファクトは、リポジトリに整理されます。イメージがリポジトリに push されるときにタグが指定されていない場合、イメージには latest タグが適用されます。タグを指定せずに別のイメージが push されると、最新の タグは元のイメージから新しいイメージに移動され、最初のイメージはタグなしで残ります。リリースには 最新 以外のタグをリリースすることをおすすめします。

用語リポジトリは必ずしも一貫して使用されるとは限りません。Artifact Registry 内では、正しいバージョンを識別するために、タグマニフェスト ダイジェストとともに、プロジェクト、リージョンまたはマルチリージョン、画像の名前を識別するためのパスの一部を使う方がより便利です。

例:

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

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

画像

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

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

例:

docker pull us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

  • us-docker.pkg.dev は、us マルチリージョンを含むレジストリです
  • /google-samples/containers/gke/ は名前空間とサブ名前空間です。Artifact Registry では、google-samples は Google Cloud プロジェクトであり、containers は Artifact Registry リポジトリと呼ばれます。
  • hello-app はアーティファクト名です。
  • :1.0 は、pull するアーティファクトのバージョンを指定するタグです。

レイヤ

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

タグ

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

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

例:

docker push us-docker.pkg.dev/google-samples/containers/gke/hello-app

イメージを hello-app:latest に push する

docker pull us-docker.pkg.dev/google-samples/containers/gke/hello-app

イメージ hello-app:latest を pull します。

latest 以外のタグが付いたリポジトリにイメージが push されるときに、latest タグが追加されないため、latest 画像が最新の変更より古い場合があります。リリースには、latest 以外のタグを使用することをおすすめします。イメージへのタグ付けの詳細については、イメージに適切なタグを付けるをご覧ください。

マニフェスト

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

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

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

次のステップ