コンテナのコンセプト

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

レジストリ

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

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

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

リポジトリ

名前は同じであってもタグが異なるイメージとアーティファクトは、リポジトリにまとめられます。イメージがリポジトリに 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-imagequickstart-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 イメージ内のレイヤに対応します。レジストリ内では、共通レイヤを持つイメージがこれらのレイヤを共有するため、ストレージ効率が向上します。セキュリティ上、異なるレジストリ間でレイヤが共有されることはありません。

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

タグ

ユーザーは、イメージをリポジトリに 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 固有のタグ付けとマニフェストの詳細については、イメージの管理コンテナ イメージの使用をご覧ください。

次のステップ