正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

コンテナレジストリからコンテナイメージを削除する

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

コンテナイメージをレジストリから削除できます。

特定の条件に基づいてコンテナイメージを自動的に削除するには、ガベージコレクションを使用します。または、サードパーティ製のツールを使用して、特定のプロジェクトからコンテナイメージを削除するためのCI/CDジョブを作成できます。

プロジェクトまたはグループから特定のコンテナイメージを削除するには、GitLab UIまたはGitLab APIを使用します。

コンテナイメージの削除は破壊的な操作であり、元に戻すことはできません。削除されたコンテナイメージを復元するには、ビルドして再度アップロードする必要があります。

ガベージコレクション

GitLab Self-Managedインスタンスでコンテナイメージを削除しても、ストレージ容量は解放されず、削除対象としてマークされるだけです。参照されていないコンテナイメージを実際に削除してストレージ容量を回復するには、GitLab Self-Managedインスタンスの管理者がガベージコレクションを実行する必要があります。

GitLab.comのコンテナレジストリには、自動オンラインガベージコレクターが含まれています。自動ガベージコレクターを使用すると、参照されていない場合、以下は24時間後に自動的に削除がスケジュールされます:

  • どのイメージマニフェストにも参照されていないレイヤー。
  • タグ付けされておらず、別のマニフェスト(マルチアーキテクチャイメージなど)によって参照されていないイメージマニフェスト。

オンラインガベージコレクターはインスタンス全体の機能であり、すべてのネームスペースに適用されます。

GitLab UIを使用する

GitLab UIを使用してコンテナイメージを削除するには、次の手順に従います:

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトまたはグループを見つけます。

  2. 詳細は以下の説明を参照してください:

    • グループの場合は、操作 > Container Registry(コンテナレジストリ)を選択します。
    • プロジェクトの場合は、デプロイ > Container Registry(コンテナレジストリ)を選択します。
  3. Container Registry(コンテナレジストリ)ページから、次のいずれかの方法で削除するものを選択できます:

    • 赤い remove Trashアイコンを選択して、リポジトリ全体と、それに含まれるすべてのタグ付けを削除します。
    • リポジトリに移動し、赤い remove Trashアイコンを削除するタグの横にあるアイコンを選択して、タグ付けを個別にまたはまとめて削除します。
  4. ダイアログで、タグを削除を選択します。

削除に10回以上失敗したコンテナリポジトリは、自動的にイメージの削除を停止します。

GitLab APIを使用する

APIを使用して、コンテナイメージの削除プロセスを自動化できます。詳細については、次のエンドポイントを参照してください:

GitLab CI/CDを使用する

GitLab CI/CDには、コンテナイメージを削除する組み込みの方法はありません。この例では、GitLabレジストリAPIと通信するregctlというサードパーティ製のツールを使用しています。このサードパーティ製ツールのサポートについては、regclientのイシュートラッカーを参照してください。

次の例では、2つのステージング、buildcleanを定義します。build_imageジョブはブランチのコンテナイメージをビルドし、delete_imageジョブはそれを削除します。reg実行可能ファイルがダウンロードされ、$CI_PROJECT_PATH:$CI_COMMIT_REF_SLUG 定義済みのCI/CD変数に一致するコンテナイメージを削除するために使用されます。

この例を使用するには、ニーズに合わせてIMAGE_TAG変数を変更します。

stages:
  - build
  - clean

build_image:
  image: docker:20.10.16
  stage: build
  services:
    - docker:20.10.16-dind
  variables:
    IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $IMAGE_TAG .
    - docker push $IMAGE_TAG
  rules:
      - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
        when: never
      - if: $CI_COMMIT_BRANCH

delete_image:
  stage: clean
  variables:
    IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
    REGCTL_VERSION: v0.6.1
  rules:
      - if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH
  image: alpine:latest
  script:
    - apk update
    - apk add curl
    - curl --fail-with-body --location "https://github.com/regclient/regclient/releases/download/${REGCTL_VERSION}/regctl-linux-amd64" > /usr/bin/regctl
    - chmod 755 /usr/bin/regctl
    - regctl registry login ${CI_REGISTRY} -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD}
    - regctl tag rm $IMAGE

リリースページから最新のregctlリリースをダウンロードし、delete_imageジョブで定義されているREGCTL_VERSION変数を変更してコード例を更新できます。

クリーンアップポリシーを使用する

プロジェクトごとのクリーンアップポリシーを作成して、古いタグとイメージがコンテナレジストリから定期的に削除されるようにすることができます。