GitLab 컨테이너 레지스트리

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

각 GitLab 프로젝트에 대한 컨테이너 이미지를 저장하기 위해 통합된 컨테이너 레지스트리를 사용할 수 있습니다.

GitLab 인스턴스에 대한 컨테이너 레지스트리를 활성화하려면 관리자 문서를 참조하십시오.

note
Docker Hub에서 Docker 컨테이너 이미지를 가져오는 경우 GitLab Dependency Proxy를 사용하여 속도 제한을 피하고 파이프라인을 가속화할 수 있습니다. Docker 레지스트리에 대한 자세한 내용은 문서를 참조하십시오.

컨테이너 레지스트리 보기

프로젝트 또는 그룹의 컨테이너 레지스트리를 볼 수 있습니다.

  1. 왼쪽 사이드바에서 검색 또는 이동하여 찾기를 선택하고 프로젝트 또는 그룹을 찾습니다.
  2. 배포 > 컨테이너 레지스트리를 선택합니다.

컨테이너 이미지를 검색, 정렬, 필터링, 삭제할 수 있습니다. 브라우저에서 URL을 복사하여 필터링된 뷰를 공유할 수 있습니다.

비공개 프로젝트의 경우 프로젝트 또는 그룹 멤버만 컨테이너 레지스트리에 액세스할 수 있습니다. 비공개 레지스트리에서 다운로드한 컨테이너 이미지는 인스턴스 실행 중에 다른 사용자에게 사용 가능할 수 있습니다. (https://docs.gitlab.com/runner/security/index.html#usage-of-private-docker-images-with-if-not-present-pull-policy).

프로젝트가 공개되면 컨테이너 레지스트리도 공개됩니다.

컨테이너 레지스트리에서 특정 컨테이너 이미지의 태그 보기

컨테이너 레지스트리 태그 상세정보 페이지를 사용하여 특정 컨테이너 이미지와 관련된 태그 디렉터리을 볼 수 있습니다.

  1. 왼쪽 사이드바에서 검색 또는 이동하여 찾기를 선택하고 프로젝트 또는 그룹을 찾습니다.
  2. 배포 > 컨테이너 레지스트리를 선택합니다.
  3. 컨테이너 이미지를 선택합니다.

발행일, 사용 스토리지 양, 매니페스트 및 구성 다이제스트 등 각 태그에 대한 자세한 정보를 볼 수 있습니다.

이 페이지에서 태그를 검색, 정렬 (태그 이름별로), 필터링 및 삭제할 수 있습니다. 브라우저에서 URL을 복사하여 필터링된 뷰를 공유할 수 있습니다.

컨테이너 레지스트리에서 컨테이너 이미지 사용

컨테이너 레지스트리에 호스팅된 컨테이너 이미지를 다운로드하고 실행하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동하여 찾기를 선택하고 프로젝트 또는 그룹을 찾습니다.
  2. 배포 > 컨테이너 레지스트리를 선택합니다.
  3. 작업하려는 컨테이너 이미지를 찾고 복사를 선택합니다.

    컨테이너 레지스트리 이미지 URL

  4. 복사된 링크로 docker run을 사용합니다:

    docker run [options] registry.example.com/group/project/image [arguments]
    
note
컨테이너 레지스트리에서 컨테이너 이미지를 다운로드하려면 컨테이너 레지스트리에 대한 인증이 필요합니다.

컨테이너 이미지 실행에 대한 자세한 내용은 Docker 문서를 참조하십시오.

컨테이너 이미지의 명명 규칙

컨테이너 이미지는 다음과 같은 명명 규칙을 따라야 합니다:

<레지스트리 서버>/<네임스페이스>/<프로젝트>[/<옵션 경로>]

예를 들어, 프로젝트가 gitlab.example.com/mynamespace/myproject인 경우 컨테이너 이미지는 gitlab.example.com/mynamespace/myproject로 이름 지어져야 합니다.

컨테이너 이미지 이름 끝에 최대 두 수준까지 추가적인 이름을 추가할 수 있습니다.

예를 들어, 프로젝트가 myproject로 명명되어 있는 경우 다음은 모두 유효한 컨테이너 이미지 이름입니다:

registry.example.com/mynamespace/myproject:some-tag
registry.example.com/mynamespace/myproject/image:latest
registry.example.com/mynamespace/myproject/my/image:rc1

컨테이너 레지스트리 리포지터리 이동 또는 이름 변경

컨테이너 이미지를 푸시한 후에는 기존 컨테이너 레지스트리 리포지터리의 이동 또는 이름 변경을 지원하지 않습니다. 컨테이너 이미지는 리포지터리 경로와 일치하는 경로에 저장됩니다. 따라서 컨테이너 레지스트리가 있는 리포지터리를 이동하거나 이름을 변경하려면 기존 컨테이너 이미지를 모두 삭제해야 합니다. 이러한 알려진 문제를 해결하기 위한 커뮤니티 제안은 issue 18383에서 공유되어 있습니다.

프로젝트용 컨테이너 레지스트리 비활성화

컨테이너 레지스트리는 기본적으로 활성화되어 있습니다.

그러나 프로젝트에서 컨테이너 레지스트리를 제거할 수 있습니다:

  1. 왼쪽 사이드바에서 검색 또는 이동하여 찾기를 선택하고 프로젝트를 찾습니다.
  2. 설정 > 일반을 선택합니다.
  3. 가시성, 프로젝트 기능, 권한 섹션을 확장하고 컨테이너 레지스트리를 비활성화합니다.
  4. 변경 사항 저장을 선택합니다.

프로젝트의 사이드바에서 배포 > 컨테이너 레지스트리 항목이 제거됩니다.

컨테이너 레지스트리 가시성 변경

기본적으로 컨테이너 레지스트리는 프로젝트에 액세스 권한이 있는 모든 사용자에게 표시됩니다. 그러나 프로젝트의 컨테이너 레지스트리 가시성을 변경할 수 있습니다.

이 설정이 사용자에게 부여하는 권한에 대한 자세한 내용은 컨테이너 레지스트리 가시성 권한을 참조하십시오.

  1. 왼쪽 사이드바에서 검색 또는 이동하여 찾기를 선택하고 프로젝트를 찾습니다.
  2. 설정 > 일반을 선택합니다.
  3. 가시성, 프로젝트 기능, 권한 섹션을 확장합니다.
  4. 컨테이너 레지스트리 아래에서 드롭다운 디렉터리에서 옵션을 선택합니다:

    • 액세스 권한이 있는 모든 사람 (기본): 프로젝트 액세스 권한이 있는 모든 사람에게 컨테이너 레지스트리가 표시됩니다. 프로젝트가 공개된 경우 컨테이너 레지스트리 역시 공개됩니다. 프로젝트가 내부 또는 비공개인 경우 컨테이너 레지스트리 역시 내부 또는 비공개됩니다.

    • 프로젝트 멤버만: 컨테이너 레지스트리는 적어도 기록자 역할을 가진 프로젝트 멤버에게만 표시됩니다. 이 가시성은 액세스 권한이 있는 모든 사람으로 설정된 비공개 프로젝트의 동작과 유사합니다.

  5. 변경 사항 저장을 선택합니다.

컨테이너 레지스트리 가시성 권한

컨테이너 레지스트리의 보기 및 컨테이너 이미지를 다운로드할 수 있는 권한은 컨테이너 레지스트리의 가시성 권한으로 제어됩니다. UI의 가시성 설정 또는 API를 통해 가시성을 변경할 수 있습니다. 이 설정은 컨테이너 레지스트리를 보거나 컨테이너 이미지를 추출하는 권한을 부여합니다. 그러나 컨테이너 레지스트리를 비활성화하면 모든 컨테이너 레지스트리 작업이 비활성화됩니다.

    익명
(인터넷의 모든 사람)
게스트 기록자, 개발자, 관리자, 소유자
Everyone With Access (UI에서 액세스 권한이 있는 모든 사람으로 설정) 또는 enabled (API에서)인 공개 프로젝트의 컨테이너 레지스트리 컨테이너 레지스트리 보기 및 이미지 다운로드
Only Project Members(UI에서 프로젝트 멤버만으로 설정) 또는 private (API에서)인 공개 프로젝트의 컨테이너 레지스트리 컨테이너 레지스트리 보기 및 이미지 다운로드 아니요 아니요
Everyone With Access (UI에서 액세스 권한이 있는 모든 사람으로 설정) 또는 enabled (API에서)인 내부 프로젝트의 컨테이너 레지스트리 컨테이너 레지스트리 보기 및 이미지 다운로드 아니요
Only Project Members(UI에서 프로젝트 멤버만으로 설정) 또는 private (API에서)인 내부 프로젝트의 컨테이너 레지스트리 컨테이너 레지스트리 보기 및 이미지 다운로드 아니요 아니요
Everyone With Access (UI에서 액세스 권한이 있는 모든 사람으로 설정) 또는 enabled (API에서)인 비공개 프로젝트의 컨테이너 레지스트리 컨테이너 레지스트리 보기 및 이미지 다운로드 아니요 아니요
Only Project Members(UI에서 프로젝트 멤버만으로 설정) 또는 private (API에서)인 비공개 프로젝트의 컨테이너 레지스트리 컨테이너 레지스트리 보기 및 이미지 다운로드 아니요 아니요
disabled 상태인 모든 프로젝트의 컨테이너 레지스트리 컨테이너 레지스트리의 모든 작업 아니요 아니요 아니요

지원되는 이미지 유형

컨테이너 레지스트리는 Docker V2Open Container Initiative (OCI) 이미지 형식을 지원합니다. 게다가, 컨테이너 레지스트리는 OCI 분배 명세에 준수합니다.

OCI 지원은 레지스트리에 OCI 기반 이미지 형식을 호스팅할 수 있음을 의미하며, Helm 3+ 차트 패키지와 같은 OCI 기반 이미지 형식을 지원합니다. GitLab API 및 UI에서 이미지 형식 간의 구분은 없습니다. 이슈 38047는 Helm부터 시작하여 이 구분을 다룹니다.

컨테이너 이미지 서명

GitLab 컨테이너 레지스트리에서는 컨테이너 이미지를 Cosign 서명과 관련시키기 위해 OCI 1.1 매니페스트 subject 필드를 사용할 수 있습니다.

그런 다음 해당 서명의 태그를 검색할 필요 없이 연결된 컨테이너 이미지 옆에 서명 정보를 볼 수 있습니다.

특정 컨테이너 이미지의 태그를 보는 경우, 각 태그 옆에 연결된 서명이 표시된 아이콘을 볼 수 있습니다. 서명의 세부 정보를 보려면 해당 아이콘을 선택하세요.

전제 조건:

  • 컨테이너 이미지에 서명하기 위해서는 Cosign v2.0 이상이 필요합니다.
  • Self-Managed형 GitLab 인스턴스의 경우, 서명을 표시하기 위해 메타데이터 데이터베이스로 구성된 GitLab 컨테이너 레지스트리가 필요합니다.

OCI 참조자 데이터를 사용하여 컨테이너 이미지에 서명 추가

Cosign을 사용하여 서명에 참조자 데이터를 추가하려면 다음을 해야 합니다:

  • COSIGN_EXPERIMENTAL 환경 변수를 1로 설정합니다.
  • 서명 명령에 --registry-referrers-mode oci-1-1를 추가합니다.

예시:

COSIGN_EXPERIMENTAL=1 cosign sign --registry-referrers-mode oci-1-1 <컨테이너 이미지>
note
GitLab 컨테이너 레지스트리는 OCI 1.1 매니페스트 subject 필드를 지원하지만, OCI 1.1 Referrers API를 완전히 구현하지는 않습니다.