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

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

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

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

가비지 수집

자체 관리형 인스턴스에서 컨테이너 이미지를 삭제해도 저장 공간을 확보하지는 않고, 이미지를 삭제할 수 있도록 표시하는 것뿐입니다. 참조되지 않는 컨테이너 이미지를 실제로 삭제하고 저장 공간을 되찾으려면, 관리자가 가비지 수집을 실행해야 합니다.

GitLab.com에서는 컨테이너 레지스트리의 최신 버전에 자동 온라인 가비지 수집기가 포함되어 있습니다. 자세한 정보는 이 블로그 게시물을 확인하세요. 컨테이너 레지스트리의 이번 새로운 버전에서는 다음이 24시간 동안 참조되지 않은 상태로 남겨두면 자동으로 삭제됩니다:

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

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

GitLab UI 사용

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

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

    • 빨간색 휴지통 아이콘을 선택하여 전체 저장소와 해당하는 모든 태그를 삭제합니다.
    • 저장소로 이동하여 원하는 태그를 선택하여 개별적으로 또는 대량으로 삭제합니다. 삭제하려는 태그 옆의 빨간색 휴지통 아이콘을 선택합니다.
  4. 대화 상자에서 태그 제거를 선택합니다.

GitLab API 사용

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

GitLab CI/CD 사용

참고: 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

참고: 가장 최신 버전의 reg릴리스 페이지에서 다운로드하고, delete_image 작업에 정의된 REG_SHA256REG_VERSION 변수를 수정하여 코드 예제를 업데이트할 수 있습니다.

정리 정책 사용

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