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

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

caution
コンテナイメージの削除は破壊的アクションであり、元に戻すことはできません。削除したコンテナイメージを復元するには、再構築して再アップロードする必要があります。

ガベージコレクション

自己管理インスタンスでコンテナイメージを削除しても、ストレージ領域は解放されません。参照されていないコンテナイメージを実際に削除してストレージ領域を回復するには、管理者はガベージコレクションを実行する必要があります。

GitLab.comでは、コンテナレジストリの最新バージョンに自動オンラインガベージコレクタが含まれています。詳しくはこちらのブログ記事をご覧ください。このコンテナレジストリの新バージョンでは、参照されないまま放置された場合、以下のものが24時間後に自動的に削除されるようスケジュールされます:

  • どの画像マニフェストからも参照されていないレイヤー。
  • タグを持たず、他のマニフェストによって参照されていない画像マニフェスト(マルチアーキテクチャ画像など)。

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

GitLab UI を使う

GitLab UI を使ってコンテナイメージを削除するには:

  1. 左側のサイドバーで、「検索」を選択するか、または「移動」を選択して、プロジェクトまたはグループを見つけます。
  2. 使用例:
    • グループの場合は、「オペレーション」>「コンテナレジストリ」を選択します。
    • プロジェクトの場合は、[デプロイ] > [コンテナレジストリ]を選択します。
  3. コンテナレジストリ]ページから、削除する内容を選択します:

    • 赤いアイコンを選択して、リポジトリ全体とそのリポジトリに含まれるすべてのタグを削除します。ゴミ箱アイコン
    • リポジトリに移動し、タグを個別または一括で削除するには、削除したいタグの横にある赤い{削除}アイコンを選択します。削除したいタグの横にあるゴミ箱アイコンを選択します。
  4. ダイアログでタグの削除を選択します。

GitLab APIを使う

API を使ってコンテナイメージの削除処理を自動化することができます。詳細については、以下のエンドポイントを参照してください:

GitLab CI/CDを使いましょう。

note
GitLab CI/CDはコンテナイメージを削除するビルトインの方法を提供していません。この例では、GitLab レジストリ API と連携するregというサードパーティツールを使います。このサードパーティツールについては、reg のイシューを参照してください。

次の例では、2 つのステージを定義しています:buildcleanbuild_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
  only:
    - branches
  except:
    - main

delete_image:
  before_script:
    - curl --fail --show-error --location "https://github.com/genuinetools/reg/releases/download/v$REG_VERSION/reg-linux-amd64" --output ./reg
    - echo "$REG_SHA256  ./reg" | sha256sum -c -
    - chmod a+x ./reg
  image: curlimages/curl:7.86.0
  script:
    - ./reg rm -d --auth-url $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $IMAGE_TAG
  stage: clean
  variables:
    IMAGE_TAG: $CI_PROJECT_PATH:$CI_COMMIT_REF_SLUG
    REG_SHA256: ade837fc5224acd8c34732bf54a94f579b47851cc6a7fd5899a98386b782e228
    REG_VERSION: 0.16.1
  only:
    - branches
  except:
    - main
note
リリースページから最新のreg リリースをダウンロードし、delete_image ジョブで定義されたREG_SHA256REG_VERSION 変数を変更することで、コード例を更新することができます。

クリーンアップポリシーを使う

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