コンテナ レジストリの概念
コンテナ・レジストリを使用する前に理解しておく必要がある主な概念について説明します。
このトピックでは、Oracle Cloud Infrastructure Registry (コンテナ・レジストリとも呼ばれる)の使用時に理解する必要がある主な概念について説明します。
画像
Container 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.3
、project01/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