컨테이너 레지스트리에서 컨테이너 이미지 삭제

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

컨테이너 레지스트리에서 컨테이너 이미지를 삭제할 수 있습니다.

caution
컨테이너 이미지를 삭제하는 것은 파괴적인 작업이며 되돌릴 수 없습니다. 삭제된 컨테이너 이미지를 복원하려면 다시 빌드하고 다시 업로드해야 합니다.

가비지 수집

Self-Managed형 인스턴스에서 컨테이너 이미지를 삭제해도 저장 공간이 해제되지 않고 이미지의 삭제가 가능하다고만 표시됩니다. 실제로 참조되지 않는 컨테이너 이미지를 삭제하고 저장 공간을 회수하려면 관리자가 가비지 수집을 실행해야 합니다.

GitLab.com에서는 컨테이너 레지스트리의 최신 버전에 자동 온라인 가비지 수집기가 포함되어 있습니다. 자세한 정보는 블로그 게시물을 참조하세요. 새 버전의 컨테이너 레지스트리에서 참조되지 않은 경우 24시간 후에 자동으로 삭제될 대상은 다음과 같습니다.

  • 이미지 매니페스트에서 참조되지 않는 레이어.
  • 태그가 없고 다른 매니페스트에서 참조되지 않는 이미지 매니페스트(다중 아키텍처 이미지와 같은).

온라인 가비지 수집기는 인스턴스 전체 기능이며 모든 네임스페이스에 적용됩니다.

GitLab UI 사용

GitLab UI를 사용하여 컨테이너 이미지를 삭제하려면 다음 단계를 수행하세요:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트 또는 그룹을 찾습니다.
  2. 다음 중 하나에 대해:
    • 그룹인 경우, 운영 > 컨테이너 레지스트리를 선택합니다.
    • 프로젝트인 경우, 배포 > 컨테이너 레지스트리를 선택합니다.
  3. 컨테이너 레지스트리 페이지에서 원하는 대로 삭제할 항목을 선택합니다.

    • 빨간색 Trash 아이콘을 선택하여 전체 리포지터리 및 해당 태그를 모두 삭제합니다.
    • 리포지터리로 이동하여 특정 태그를 개별적으로 또는 대량으로 삭제합니다.
  4. 대화 상자에서 태그 삭제를 선택합니다.

GitLab API 사용

API를 사용하여 컨테이너 이미지를 자동으로 삭제할 수 있습니다. 자세한 정보는 다음 엔드포인트를 참조하세요:

GitLab CI/CD 사용

note
GitLab CI/CD에는 컨테이너 이미지를 제거하는 기본 제공 방법이 없습니다. 이 예제는 GitLab 레지스트리 API와 통신하는 reg라는 타사 도구를 사용합니다. 이 타사 도구에 대한 지원은 reg의 이슈 큐를 참조하세요.

다음 예제에서는 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
  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_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
    REG_SHA256: ade837fc5224acd8c34732bf54a94f579b47851cc6a7fd5899a98386b782e228
    REG_VERSION: 0.16.1
  only:
    - branches
  except:
    - main
note
최신 reg 릴리스를 릴리스 페이지에서 다운로드한 다음 delete_image 작업에서 정의된 REG_SHA256REG_VERSION 변수를 변경하여 코드 예제를 업데이트할 수 있습니다.

정리 정책 사용

프로젝트별로 정리 정책을 만들어서 컨테이너 레지스트리에서 이전 태그 및 이미지가 정기적으로 삭제되도록 할 수 있습니다.