InfoGrab Docs

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

요약

컨테이너 레지스트리에서 컨테이너 이미지를 삭제할 수 있습니다. 특정 기준에 따라 컨테이너 이미지를 자동으로 삭제하려면 가비지 컬렉션을 사용하세요. 프로젝트 또는 그룹에서 특정 컨테이너 이미지를 삭제하려면 GitLab UI 또는 GitLab API를 사용할 수 있습니다.

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

특정 기준에 따라 컨테이너 이미지를 자동으로 삭제하려면 가비지 컬렉션을 사용하세요. 또는 서드파티 도구를 사용하여 특정 프로젝트에서 컨테이너 이미지를 삭제하는 CI/CD 작업을 생성할 수 있습니다.

프로젝트 또는 그룹에서 특정 컨테이너 이미지를 삭제하려면 GitLab UI 또는 GitLab API를 사용할 수 있습니다.

Warning

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

가비지 컬렉션#

GitLab Self-Managed 인스턴스에서 컨테이너 이미지를 삭제해도 스토리지 공간이 확보되지 않으며, 이미지만 삭제 대상으로 표시됩니다. 참조되지 않는 컨테이너 이미지를 실제로 삭제하고 스토리지 공간을 복구하려면 GitLab Self-Managed 인스턴스 관리자가 가비지 컬렉션을 실행해야 합니다.

GitLab.com의 컨테이너 레지스트리에는 자동 온라인 가비지 컬렉터가 포함되어 있습니다. 자동 가비지 컬렉터를 사용하면 참조되지 않은 상태로 남겨진 경우 24시간 후 다음이 자동으로 삭제 예약됩니다:

  • 이미지 매니페스트에서 참조하지 않는 레이어.
  • 태그가 없고 다른 매니페스트(예: 멀티 아키텍처 이미지)에서 참조하지 않는 이미지 매니페스트.

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

GitLab UI 사용#

GitLab UI를 사용하여 컨테이너 이미지를 삭제하려면:

  1. 상단 바에서 검색 또는 이동을 선택하고 프로젝트 또는 그룹을 찾습니다.

  2. 다음 중 하나에 해당하는 경우:

    • 그룹의 경우 Operate > Container Registry를 선택합니다.
    • 프로젝트의 경우 Deploy > Container Registry를 선택합니다.
  3. Container Registry 페이지에서 삭제할 항목을 선택할 수 있습니다. 다음 방법 중 하나를 사용합니다:

    • 빨간색 [remove] Trash 아이콘을 선택하여 전체 리포지터리와 포함된 모든 태그를 삭제합니다.
    • 리포지터리로 이동한 다음 삭제하려는 태그 옆의 빨간색 [remove] Trash 아이콘을 선택하여 태그를 개별적으로 또는 대량으로 삭제합니다.
  4. 대화 상자에서 Remove tag를 선택합니다.

10회 이상 삭제에 실패한 컨테이너 리포지터리는 이미지 삭제 시도를 자동으로 중단합니다.

GitLab API 사용#

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

GitLab CI/CD 사용#

Note

GitLab CI/CD는 컨테이너 이미지를 제거하는 내장 방법을 제공하지 않습니다. 이 예시는 GitLab Registry API와 통신하는 regctl이라는 서드파티 도구를 사용합니다. 이 서드파티 도구에 대한 지원은 regclient 이슈 트래커를 참조하세요.

다음 예시는 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
  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
Note

릴리스 페이지에서 최신 regctl 릴리스를 다운로드한 다음, delete_image 잡에서 정의된 REGCTL_VERSION 변수를 변경하여 코드 예시를 업데이트할 수 있습니다.

정리 정책 사용#

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

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

Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

컨테이너 레지스트리에서 컨테이너 이미지를 삭제할 수 있습니다. 특정 기준에 따라 컨테이너 이미지를 자동으로 삭제하려면 가비지 컬렉션을 사용하세요. 프로젝트 또는 그룹에서 특정 컨테이너 이미지를 삭제하려면 GitLab UI 또는 GitLab API를 사용할 수 있습니다.

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

특정 기준에 따라 컨테이너 이미지를 자동으로 삭제하려면 가비지 컬렉션을 사용하세요. 또는 서드파티 도구를 사용하여 특정 프로젝트에서 컨테이너 이미지를 삭제하는 CI/CD 작업을 생성할 수 있습니다.

프로젝트 또는 그룹에서 특정 컨테이너 이미지를 삭제하려면 GitLab UI 또는 GitLab API를 사용할 수 있습니다.

Warning

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

가비지 컬렉션#

GitLab Self-Managed 인스턴스에서 컨테이너 이미지를 삭제해도 스토리지 공간이 확보되지 않으며, 이미지만 삭제 대상으로 표시됩니다. 참조되지 않는 컨테이너 이미지를 실제로 삭제하고 스토리지 공간을 복구하려면 GitLab Self-Managed 인스턴스 관리자가 가비지 컬렉션을 실행해야 합니다.

GitLab.com의 컨테이너 레지스트리에는 자동 온라인 가비지 컬렉터가 포함되어 있습니다. 자동 가비지 컬렉터를 사용하면 참조되지 않은 상태로 남겨진 경우 24시간 후 다음이 자동으로 삭제 예약됩니다:

  • 이미지 매니페스트에서 참조하지 않는 레이어.
  • 태그가 없고 다른 매니페스트(예: 멀티 아키텍처 이미지)에서 참조하지 않는 이미지 매니페스트.

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

GitLab UI 사용#

GitLab UI를 사용하여 컨테이너 이미지를 삭제하려면:

  1. 상단 바에서 검색 또는 이동을 선택하고 프로젝트 또는 그룹을 찾습니다.

  2. 다음 중 하나에 해당하는 경우:

    • 그룹의 경우 Operate > Container Registry를 선택합니다.
    • 프로젝트의 경우 Deploy > Container Registry를 선택합니다.
  3. Container Registry 페이지에서 삭제할 항목을 선택할 수 있습니다. 다음 방법 중 하나를 사용합니다:

    • 빨간색 [remove] Trash 아이콘을 선택하여 전체 리포지터리와 포함된 모든 태그를 삭제합니다.
    • 리포지터리로 이동한 다음 삭제하려는 태그 옆의 빨간색 [remove] Trash 아이콘을 선택하여 태그를 개별적으로 또는 대량으로 삭제합니다.
  4. 대화 상자에서 Remove tag를 선택합니다.

10회 이상 삭제에 실패한 컨테이너 리포지터리는 이미지 삭제 시도를 자동으로 중단합니다.

GitLab API 사용#

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

GitLab CI/CD 사용#

Note

GitLab CI/CD는 컨테이너 이미지를 제거하는 내장 방법을 제공하지 않습니다. 이 예시는 GitLab Registry API와 통신하는 regctl이라는 서드파티 도구를 사용합니다. 이 서드파티 도구에 대한 지원은 regclient 이슈 트래커를 참조하세요.

다음 예시는 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
  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
Note

릴리스 페이지에서 최신 regctl 릴리스를 다운로드한 다음, delete_image 잡에서 정의된 REGCTL_VERSION 변수를 변경하여 코드 예시를 업데이트할 수 있습니다.

정리 정책 사용#

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