コンテナ レジストリの概念

コンテナ・レジストリを使用する前に理解する必要がある主な概念について学習します。

このトピックでは、Oracle Cloud Infrastructure Registry (コンテナ・レジストリとも呼ばれる)の使用時に理解する必要がある主な概念について説明します。

画像

コンテナ・レジストリは、Open Container Initiative準拠のレジストリです。その結果、Dockerイメージ、マニフェスト・リスト(マルチアーキテクチャ・イメージとも呼ばれる)、Helmチャートなど、Open Container Initiative仕様に準拠したアーティファクトを格納できます。このドキュメントの手順は、Docker CLIを使用してDockerコンテナ・イメージを格納および取得していることを前提としています。Dockerコンテナ・イメージは、通常、Dockerイメージまたは単にイメージと呼ばれます。

Dockerイメージは読取り専用テンプレートで、Dockerコンテナを作成する手順が示されています。Dockerイメージには、Dockerがコンテナとして実行するアプリケーションおよび依存関係が保持されています。Dockerイメージを作成するには、最初に、そのアプリケーションを説明するDockerfileを作成します。その後、DockerfileからDockerイメージを作成します。Dockerイメージを作成した後、それをコンテナ・レジストリなどのDockerレジストリに格納します。

通常、同じDockerイメージの異なるバージョンをレジストリ内の名前付きリポジトリにグループ化し(たとえば、project01/acme-web-appという名前のリポジトリに)、各イメージ・バージョンに異なる識別子(たとえば、'4.6.3')を指定します。そのため、レジストリ内の各イメージは、リポジトリ名とそのバージョン識別子の組合せによって一意に識別されます(たとえば、'project01/acme-web-app:4.6.3'、'project01/acme-web-app:4.6.4'など)。

リポジトリ

リポジトリは、コンテナ・レジストリで便宜上グループ化された関連イメージのわかりやすい名前付きコレクションです。通常、同じソース・イメージの異なるバージョンを同じリポジトリにグループ化し(たとえば、project01/acme-web-appという名前のリポジトリに)、各イメージ・バージョンに異なる識別子(たとえば、4.6.3)を指定します。そのため、レジストリ内の各イメージは、そのリポジトリ名とそのバージョン識別子( project01/acme-web-app:4.6.3project01/acme-web-app:4.6.4など)の組合せによって一意に識別されます。

リポジトリはプライベートまたはパブリックにできます。インターネット・アクセス権があり、適切なURLを知っているユーザーは、コンテナ・レジストリのパブリック・リポジトリからイメージをプルできます。

特定のテナンシ、リージョンおよびコンパートメント内にリポジトリが存在します。リポジトリを所有するテナンシを参照する場合、テナンシのネームスペースを指定します。テナンシ・ネームスペースは、英数字の自動生成されたランダム文字列です。たとえば、acme-devテナンシのネームスペースは、ansh81vru1zpである可能性があります。一部の古いテナンシでは、ネームスペース文字列は、すべて小文字のテナンシ名(acme-devなど)と同じ場合があることに注意してください。現在のテナンシのテナント・ネームスペースを確認するには、「プロファイル」メニューを開き、「テナンシ」をクリックします:

テナンシの管理者グループに属しているか、次の操作を行うためのREPOSITORY_MANAGE権限が付与されている必要があります:

  • 新規パブリック・リポジトリの作成
  • 既存のリポジトリをパブリック・リポジトリに変更
  • 既存のパブリック・リポジトリをプライベート・リポジトリに変更

リポジトリをプライベートにすると、テナンシの管理者グループに属するユーザーとともに、リポジトリに対する操作を実行できるようになります。アイデンティティ・ポリシーを使用すると、他のユーザーが、作成したリポジトリに対して(パブリックとプライベートの両方)他の操作を実行できます。

通常、イメージをプッシュする前に、コンパートメントに空のリポジトリを作成し、リポジトリに名前を付けます(たとえば、project01/acme-web-app)。テナンシの管理者グループに属しているか、REPOSITORY_MANAGE権限が付与されている場合は、リポジトリをプライベートにするのか、パブリックにするのかを指定することもできます(リポジトリ・アクセスを制御するポリシーを参照)。リポジトリを作成した後、そのリポジトリ名を含むコンテナ・レジストリにプッシュするイメージは、そのリポジトリにプッシュされます。

たとえば、便宜上、Ashburnリージョンのacme-devテナンシのイメージの複数のバージョンを、project01/acme-web-appと呼ばれるリポジトリにまとめる場合があります。まず、project01/acme-web-appリポジトリを作成します。次に、イメージをプッシュするときにリポジトリの名前を<registry-domain>/<tenancy-namespace>/<repo-name>:<version>の形式に含めます。たとえば、ocir.us-ashburn-1.oci.oraclecloud.com/ansh81vru1zp/project01/acme-web-app:4.6.3です。

イメージをプッシュする前に空のリポジトリを作成することは、ほぼ間違いなく通常のワークフローになることに注意してください。また、テナンシのルート・コンパートメントではなくコンパートメント内のリポジトリを管理する権限のみがある場合、イメージをプッシュする前に常にリポジトリを作成する必要があります。ただし、大部分がイメージをルート・コンパートメントにプッシュする予定の異常な位置にいる場合、空のリポジトリを事前に作成する必要はありません。詳細は、リポジトリの作成を参照してください。

用語の概要

コンテナ・レジストリでリポジトリを操作する場合、次の用語およびそれらの相互関係を明確に理解しておくと役立ちます。

リポジトリ・パス

リポジトリ・パス(このドキュメントでは<repo-path>とも呼ばれます)は、コンテナ・レジストリ内のリポジトリへの完全修飾パスです。リポジトリ・パスの形式は<registry-domain>/<tenancy-namespace>/<repo-name>です。

例:

  • ocir.us-ashburn-1.oci.oraclecloud.com/ansh81vru1zp/project01/acme-web-app
  • iad.ocir.io/ansh81vru1zp/project01/acme-web-app
  • us-phoenix-1.ocir.io/cbujx0t3wa3r/my-hello-app
レジストリ・ドメイン

コンテナ・レジストリ・レジストリ・ドメインには、コンテナ・レジストリのリージョン・キーまたはリージョン識別子が含まれます。コンテナ・レジストリ・レジストリ・ドメインには、次のいずれかの形式があります:

  • (推奨) ocir.<region-identifier>.oci.oraclecloud.com
  • <region-key>.ocir.io (OC1レルムのみ)
  • <region-identifier>.ocir.io (OC1レルムのみ)

例:

  • ocir.us-ashburn-1.oci.oraclecloud.com
  • iad.ocir.io/ansh81vru1zp
  • us-phoenix-1.ocir.io

リージョン識別子およびリージョン・キーのリストは、リージョン別の可用性を参照してください。

リージョン識別子

リージョン識別子(このドキュメントでは<region-identifier>とも呼ばれる)は、使用しているコンテナ・レジストリ・リージョンを識別します。

例:

  • us-ashburn-1
  • us-phoenix-1

リージョン識別子のリストは、リージョン別可用性を参照してください。

リージョン・キー

リージョン・キー(このドキュメントでは<region-key>とも呼ばれる)は、使用しているコンテナ・レジストリ・リージョンを識別します。

例:

  • iad
  • phx

リージョン・キーのリストは、リージョンごとの可用性を参照してください。

テナント・ネームスペース

テナンシ・ネームスペース(このドキュメントでは<tenancy-namespace>とも呼ばれる)は、自動生成された英数字のランダムで不変の文字列です。たとえば、acme-devテナンシのネームスペースは、ansh81vru1zpである可能性があります。

一部の古いテナンシでは、ネームスペース文字列が、すべて小文字のテナンシ名(たとえば、acme-dev)と同じ場合があることに注意してください。現在のテナンシのテナント・ネームスペースを確認するには、「プロファイル」メニューを開き、「テナンシ」をクリックします:テナンシ・ネームスペースが「オブジェクト・ストレージ・ネームスペース」フィールドに表示されます。

リポジトリ名

リポジトリ名(このドキュメントでは<repo-name>とも呼ばれます)は、コンテナ・レジストリのリポジトリの名前で、そこからイメージをプッシュおよびプルできます。リポジトリ名には1つ以上のスラッシュ文字を含めることができ、テナンシ全体のすべてのコンパートメント間で一意になります。

例:

  • project01/acme-web-app
  • project01/my-test-app
  • my-hello-app
  • project01/acme-web-app/component1
  • project01/acme-web-app/component2
  • project01/acme-web-app/component1/subcomponent1

リポジトリ名にはスラッシュ文字を含めることができますが、スラッシュは階層ディレクトリ構造を表していません。これは、文字列内の1文字にすぎません。便宜上、複数の異なるリポジトリの名前を同じ文字列で開始し、スラッシュ(project01/など)で終わることもできます。このような文字列は、リポジトリ名接頭辞と呼ばれることもあります。ただし、project01/acme-web-appという名前のリポジトリは、project01/my-test-appという名前のリポジトリとの関係を持つ必要はありません。一部のリポジトリに同じリポジトリ名接頭辞を使用すると、コンテナ・レジストリでリポジトリへのアクセスを整理および制御しやすくなり、他の多くのリポジトリを含めることができます。

レジストリ識別子

レジストリ識別子には、コンテナ・レジストリ・レジストリ・ドメインおよびテナンシ・ネームスペースが<registry-domain>/<tenancy-namespace>の形式で含まれます

例:

  • ocir.us-ashburn-1.oci.oraclecloud.com/ansh81vru1zp
  • iad.ocir.io/ansh81vru1zp/project01
  • us-phoenix-1.ocir.io/cbujx0t3wa3r
イメージ・パス

イメージ・パスは、レジストリ内の特定のイメージへの完全修飾パスです。イメージに関連付けられたバージョン識別子を追加して、リポジトリ・パスを拡張します。イメージ・パスの形式は<registry-domain>/<tenancy-namespace>/<repo-name>:<version>です

例:

  • ocir.us-ashburn-1.oci.oraclecloud.com/ansh81vru1zp/project01/acme-web-app:v2.0.test
  • iad.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
  • us-phoenix-1.ocir.io/cbujx0t3wa3r/my-hello-app:latest
バージョン識別子

バージョン識別子(このドキュメントでは<version>とも呼ばれる)は、既知のリポジトリ内の特定のイメージ・バージョンを参照するために使用される文字列です。例:

  • 4.6.3
  • 4.6.4
  • v2.0.test
名前

「イメージ名」という用語は、特定のリポジトリ内の特定のイメージを参照するための短い方法として使用されることもあります。このコンテキストでは、イメージ名の構造は次のとおりです。

<repo-name>:<version>

例:

  • project01/acme-web-app:4.6.3
  • project01/acme-web-app:4.6.4
  • my-hello-app:latest