コンテナレジストリからのコンテナイメージの削除
コンテナレジストリからコンテナイメージを削除できます。
ガベージコレクション
自己管理インスタンスでコンテナイメージを削除しても、ストレージ領域は解放されません。参照されていないコンテナイメージを実際に削除してストレージ領域を回復するには、管理者はガベージコレクションを実行する必要があります。
GitLab.comでは、コンテナレジストリの最新バージョンに自動オンラインガベージコレクタが含まれています。詳しくはこちらのブログ記事をご覧ください。このコンテナレジストリの新バージョンでは、参照されないまま放置された場合、以下のものが24時間後に自動的に削除されるようスケジュールされます:
- どの画像マニフェストからも参照されていないレイヤー。
- タグを持たず、他のマニフェストによって参照されていない画像マニフェスト(マルチアーキテクチャ画像など)。
オンライン ガーベッジ コレクタはインスタンス全体の機能であり、すべてのネームスペースに適用されます。
GitLab UI を使う
GitLab UI を使ってコンテナイメージを削除するには:
- 左側のサイドバーで、「検索」を選択するか、または「移動」を選択して、プロジェクトまたはグループを見つけます。
- 使用例:
- グループの場合は、「オペレーション」>「コンテナレジストリ」を選択します。
- プロジェクトの場合は、[デプロイ] > [コンテナレジストリ]を選択します。
-
コンテナレジストリ]ページから、削除する内容を選択します:
- 赤いアイコンを選択して、リポジトリ全体とそのリポジトリに含まれるすべてのタグを削除します。ゴミ箱アイコン
- リポジトリに移動し、タグを個別または一括で削除するには、削除したいタグの横にある赤い{削除}アイコンを選択します。削除したいタグの横にあるゴミ箱アイコンを選択します。
- ダイアログでタグの削除を選択します。
GitLab APIを使う
API を使ってコンテナイメージの削除処理を自動化することができます。詳細については、以下のエンドポイントを参照してください:
GitLab CI/CDを使いましょう。
次の例では、2 つのステージを定義しています:build
とclean
。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
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
reg
リリースをダウンロードし、delete_image
ジョブで定義されたREG_SHA256
とREG_VERSION
変数を変更することで、コード例を更新することができます。クリーンアップポリシーを使う
プロジェクトごとにクリーンアップポリシーを作成し、コンテナレジストリから古いタグやイメージが定期的に削除されるようにすることができます。