GitLabコンテナレジストリ
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
統合されたコンテナレジストリを使用して、各GitLabプロジェクトのコンテナイメージを保存できます。
管理者は、GitLabインスタンスのコンテナレジストリを有効にする必要があります。詳細については、GitLabコンテナレジストリ管理を参照してください。
Docker Hubからコンテナイメージをプルする場合は、GitLab依存プロキシを使用すると、レート制限を回避してパイプラインを高速化できます。
コンテナレジストリを表示する
プロジェクトまたはグループのコンテナレジストリを表示できます。
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトまたはグループを見つけます。
- デプロイ > Container Registry(コンテナレジストリ)を選択します。
コンテナイメージは、検索、並べ替え、フィルタリング、削除できます。ブラウザからURLをコピーすると、フィルタリングしたビューを共有できます。
コンテナレジストリ内の特定のコンテナイメージのタグを表示する
コンテナレジストリのTag Details(タグの詳細)ページを使用して、特定のコンテナイメージに関連付けられているタグのリストを表示できます:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトまたはグループを見つけます。
- デプロイ > Container Registry(コンテナレジストリ)を選択します。
- コンテナイメージを選択します。
公開日時、使用ストレージ量、マニフェスト、設定のダイジェストなど、各タグに関する詳細を表示できます。
このページでは、タグの検索、並べ替え(タグ名順)、削除が可能です。ブラウザからURLをコピーすると、フィルタリングしたビューを共有できます。
ストレージ使用量
コンテナレジストリのストレージ使用量を表示して、プロジェクトおよびグループ全体にわたってコンテナリポジトリのサイズを追跡して管理できます。
詳細については、コンテナレジストリの使用状況を表示するを参照してください。
コンテナレジストリからコンテナイメージを使用する
コンテナレジストリでホストされているコンテナイメージをダウンロードして実行するには:
左側のサイドバーで、検索または移動先を選択して、プロジェクトまたはグループを見つけます。
デプロイ > Container Registry(コンテナレジストリ)を選択します。
作業対象のコンテナイメージを見つけて、イメージパスをコピー( )を選択します。
コピーしたリンクを使用して
docker runを実行します:docker run [options] registry.example.com/group/project/image [arguments]
プライベートリポジトリからコンテナイメージをダウンロードするには、コンテナレジストリで認証を行う必要があります。詳細については、レジストリを使用した認証を参照してください。
コンテナイメージの命名規則
コンテナイメージは、次の命名規則に準拠する必要があります:
<registry server>/<namespace>/<project>[/<optional path>]たとえば、プロジェクトがgitlab.example.com/mynamespace/myprojectの場合、コンテナイメージの名前はgitlab.example.com/mynamespace/myprojectにする必要があります。
コンテナイメージ名の最後に、最大2レベルの深さまで追加の名前を付加できます。
たとえば、以下はすべてmyprojectという名前のプロジェクト内のコンテナイメージに有効な名前です:
registry.example.com/mynamespace/myproject:some-tagregistry.example.com/mynamespace/myproject/image:latestregistry.example.com/mynamespace/myproject/my/image:rc1コンテナレジストリのリポジトリを移動または名前変更する
コンテナリポジトリのパスは、関連するプロジェクトのリポジトリパスと常に一致するため、コンテナレジストリのみを名前変更または移動することはできません。代わりに、次のいずれかを実行できます:
入力済みのコンテナリポジトリがあるプロジェクトの名前変更は、GitLab.comのみでサポートされています。
GitLab Self-Managedインスタンスでは、グループまたはプロジェクトを移動または名前を変更する前に、すべてのコンテナイメージを削除できます。別の方法として、イシュー18383では、この制限を回避するためのコミュニティからの提案が説明されています。エピック9459では、コンテナリポジトリがあるプロジェクトとグループをGitLab Self-Managedに移動するためのサポートを追加することが提案されています。
プロジェクトのコンテナレジストリを無効にする
コンテナレジストリはデフォルトで有効になっています。
ただし、次の手順でプロジェクトのコンテナレジストリを削除できます:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > 一般を選択します。
- 可視性、プロジェクトの機能、権限セクションを展開し、コンテナレジストリを無効にします。
- 変更を保存を選択します。
デプロイ > Container Registry(コンテナレジストリ)エントリがプロジェクトのサイドバーから削除されます。
コンテナレジストリの表示レベルを変更する
デフォルトでは、コンテナレジストリはプロジェクトへのアクセス権を持つすべてのユーザーに表示されます。ただし、プロジェクトのコンテナレジストリの表示レベルは変更できます。
この設定がユーザーに付与する権限の詳細については、コンテナレジストリの表示レベル権限を参照してください。
左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
設定 > 一般を選択します。
可視性、プロジェクトの機能、権限セクションを展開します。
コンテナレジストリで、次のようにドロップダウンリストからオプションを選択します:
アクセスできる人すべて: コンテナレジストリは、プロジェクトへのアクセス権を持つすべてのユーザーに表示されます。プロジェクトが公開の場合、コンテナレジストリも公開になります。プロジェクトが内部またはプライベートの場合、コンテナレジストリも内部またはプライベートになります。
プロジェクトメンバーのみ: コンテナレジストリは、少なくともレポーターロールを持つプロジェクトメンバーのみに表示されます。この表示レベルは、コンテナレジストリの表示レベルがアクセスできる人すべてに設定されているプライベートプロジェクトの動作に似ています。
変更を保存を選択します。
コンテナレジストリの表示レベル権限
コンテナレジストリの表示機能とコンテナイメージのプル機能は、コンテナレジストリの表示レベル権限によって制御されます。表示レベルは、UIの表示レベル設定またはAPIで変更できます。
コンテナレジストリの更新、コンテナイメージのプッシュまたは削除などのその他の権限は、この設定の影響を受けません。ただし、コンテナレジストリを無効にすると、すべてのコンテナレジストリ操作が無効になります。詳細については、ロールと権限を参照してください。
| 匿名 (インターネット上のすべてのユーザー) | ゲスト | レポーター、デベロッパー、メンテナー、オーナー | ||
|---|---|---|---|---|
| コンテナレジストリの表示レベルが アクセスできる人すべて(UI)または enabled(API)に設定されているパブリックプロジェクト | コンテナレジストリの表示と イメージのプル | 可 | 可 | 可 |
| コンテナレジストリの表示レベルが プロジェクトメンバーのみ(UI)または private(API)に設定されているパブリックプロジェクト | コンテナレジストリの表示と イメージのプル | 不可 | 不可 | 可 |
| コンテナレジストリの表示レベルが アクセスできる人すべて(UI)または enabled(API)に設定されている内部プロジェクト | コンテナレジストリの表示と イメージのプル | 不可 | 可 | 可 |
| コンテナレジストリの表示レベルが プロジェクトメンバーのみ(UI)または private(API)に設定されている内部プロジェクト | コンテナレジストリの表示と イメージのプル | 不可 | 不可 | 可 |
| コンテナレジストリの表示レベルが アクセスできる人すべて(UI)または enabled(API)に設定されているプライベートプロジェクト | コンテナレジストリの表示と イメージのプル | 不可 | 不可 | 可 |
| コンテナレジストリの表示レベルが プロジェクトメンバーのみ(UI)または private(API)に設定されているプライベートプロジェクト | コンテナレジストリの表示と イメージのプル | 不可 | 不可 | 可 |
コンテナレジストリがdisabledのすべてのプロジェクト | コンテナレジストリに対するすべての操作 | 不可 | 不可 | 不可 |
サポートされているイメージタイプ
コンテナレジストリは、Docker V2とOpen Container Initiative(OCI)のイメージ形式をサポートしています。さらに、コンテナレジストリはOCI配布仕様に準拠しています。
OCIサポートとは、Helm 3以降のチャートパッケージなど、OCIベースのイメージ形式をレジストリでホストできることを意味します。GitLab APIとUIでのイメージ形式に差異はありません。イシュー38047では、Helmを始めとして、この区別について説明しています。
コンテナイメージの署名
GitLabコンテナレジストリでは、OCI 1.1マニフェストのsubjectフィールドを使用して、コンテナイメージをCosign署名に関連付けることができます。これにより、該当する署名のタグを検索する必要なく、署名情報は関連付けられたコンテナイメージとともに表示されるようになります。
コンテナイメージのタグを表示する際、関連付けられた署名がある各タグの横にアイコンが表示されます。署名の詳細を表示するには、アイコンをクリックします。
前提要件:
- コンテナイメージに署名するには、Cosign v2.0以降が必要です。
- GitLab Self-Managedの場合、署名を表示するには、メタデータデータベースで設定されたGitLabコンテナレジストリが必要です。詳細については、コンテナレジストリのメタデータデータベースを参照してください。
OCIリファラーデータを使用してコンテナイメージに署名する
Cosignを使用して署名にリファラーデータを追加するには、次の操作を行う必要があります:
COSIGN_EXPERIMENTAL環境変数を1に設定します。--registry-referrers-mode oci-1-1を署名コマンドに追加します。
次に例を示します:
COSIGN_EXPERIMENTAL=1 cosign sign --registry-referrers-mode oci-1-1 <container image>GitLabコンテナレジストリはOCI 1.1マニフェストのsubjectフィールドをサポートしていますが、OCI 1.1 Referrers APIを完全に実装しているわけではありません。