InfoGrab DocsInfoGrab Docs

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

요약

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

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

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

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

Warning

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

가비지 컬렉션#

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

GitLab.com의 컨테이너 레지스트리에는 자동 온라인 가비지 컬렉터가 포함되어 있습니다. 자동 가비지 컬렉터를 사용하면 다음 항목이 참조되지 않은 채 남아 있을 때 24시간 후 삭제되도록 자동으로 예약됩니다.

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

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

GitLab UI 사용#

GitLab UI로 컨테이너 이미지를 삭제하려면 다음 단계를 수행합니다.

  1. 상단 바에서 Search or go to를 선택하고 프로젝트나 그룹을 찾습니다.

  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 이슈 트래커를 참고합니다.

다음 예시는 build와 clean 두 개의 Stage를 정의합니다. build_image job은 브랜치용 컨테이너 이미지를 빌드하고, delete_image job은 이를 삭제합니다. 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 job에 정의된 REGCTL_VERSION 변수를 변경해 코드 예시를 업데이트할 수 있습니다.

정리 정책 사용#

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

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

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

요약

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

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

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

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

Warning

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

가비지 컬렉션#

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

GitLab.com의 컨테이너 레지스트리에는 자동 온라인 가비지 컬렉터가 포함되어 있습니다. 자동 가비지 컬렉터를 사용하면 다음 항목이 참조되지 않은 채 남아 있을 때 24시간 후 삭제되도록 자동으로 예약됩니다.

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

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

GitLab UI 사용#

GitLab UI로 컨테이너 이미지를 삭제하려면 다음 단계를 수행합니다.

  1. 상단 바에서 Search or go to를 선택하고 프로젝트나 그룹을 찾습니다.

  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 이슈 트래커를 참고합니다.

다음 예시는 build와 clean 두 개의 Stage를 정의합니다. build_image job은 브랜치용 컨테이너 이미지를 빌드하고, delete_image job은 이를 삭제합니다. 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 job에 정의된 REGCTL_VERSION 변수를 변경해 코드 예시를 업데이트할 수 있습니다.

정리 정책 사용#

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