컨테이너 레지스트리에서 컨테이너 이미지 삭제
컨테이너 레지스트리에서 컨테이너 이미지를 삭제할 수 있습니다.
특정 기준에 따라 컨테이너 이미지를 자동으로 삭제하려면 가비지 수집을 사용하세요. 또는 특정 프로젝트에서 컨테이너 이미지를 삭제하기 위해 3rd-파티 도구를 사용하여 CI/CD 작업 생성 할 수 있습니다.
프로젝트 또는 그룹에서 특정 컨테이너 이미지를 삭제하려면 GitLab UI 사용 또는 GitLab API 사용할 수 있습니다.
경고: 컨테이너 이미지를 삭제하는 것은 파괴적인 작업으로, 되돌릴 수 없습니다. 삭제된 컨테이너 이미지를 복원하려면 다시 빌드하고 재업로드해야 합니다.
가비지 수집
자체 관리 인스턴스에서 컨테이너 이미지를 삭제하더라도 저장 공간은 해제되지 않고 삭제할 수 있는 이미지로 표시됩니다. 참조되지 않는 컨테이너 이미지를 실제로 삭제하고 저장 공간을 회수하려면 자체 관리 인스턴스 관리자는 가비지 수집을 실행해야 합니다.
GitLab.com의 컨테이너 레지스트리에는 자동 온라인 가비지 수집기가 포함되어 있습니다. 자동 가비지 수집기를 사용하면 다음 항목이 24시간 동안 참조되지 않으면 자동으로 삭제 예정입니다:
- 이미지 매니페스트에서 참조되지 않는 레이어.
- 태그가 없는 이미지 매니페스트 및 다른 매니페스트에서 참조되지 않는 이미지 매니페스트(다중 아키텍처 이미지).
온라인 가비지 수집기는 인스턴스 전역 기능이며 모든 네임스페이스에 적용됩니다.
GitLab UI 사용
GitLab UI를 사용하여 컨테이너 이미지를 삭제하려면 다음을 수행하세요:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트 또는 그룹을 찾습니다.
- 다음 중 하나에 대해:
- 그룹의 경우 작업 > 컨테이너 레지스트리를 선택합니다.
- 프로젝트의 경우 배포 > 컨테이너 레지스트리를 선택합니다.
-
컨테이너 레지스트리 페이지에서 삭제할 항목을 선택하여 원하는 항목을 삭제하세요:
- 빨간색의 휴지통 아이콘을 선택하여 전체 저장소 및 해당 태그를 모두 삭제합니다.
- 저장소로 이동하여 해당 태그를 개별적으로 또는 일괄로 삭제하려면 삭제할 태그 옆의 빨간색 휴지통 아이콘을 선택합니다.
- 대화상자에서 태그를 제거합니다(Remove tag)를 선택합니다.
GitLab API 사용
API를 사용하여 컨테이너 이미지를 자동으로 삭제할 수 있습니다. 자세한 내용은 다음 엔드포인트를 참조하세요:
GitLab CI/CD 사용
참고:
GitLab CI/CD에는 컨테이너 이미지를 제거할 수 있는 내장된 방법이 제공되지 않습니다.
이 예는 GitLab 레지스트리 API에 연결되는 regctl
라는 서드파티 도구를 사용합니다.
이 서드파티 도구 사용에 대한 도움이 필요하면 regclient의 이슈 목록을 참조하세요.
다음 예제에서는 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
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
변수를 변경하여 코드 예제를 업데이트할 수 있습니다.
정리 정책 사용
프로젝트별 정리 정책을 생성하여 컨테이너 레지스트리에서 이전 태그 및 이미지가 정기적으로 삭제되도록 할 수 있습니다.