Container Registry 개요

Container Registry는 Google Cloud에서 실행되는 비공개 컨테이너 이미지 레지스트리입니다. Container Registry는 Docker 이미지 매니페스트 V2와 OCI 이미지 형식을 지원합니다.

많은 사람이 공개 Docker 이미지를 저장하는 중앙 레지스트리로 Dockerhub를 사용하지만, 이미지 액세스를 제어하려면 Container Registry 같은 비공개 레지스트리를 사용해야 합니다.

보안 HTTPS 엔드포인트를 통해 Container Registry에 액세스하여 모든 시스템, VM 인스턴스 또는 자체 하드웨어로 이미지를 내보내고 가져오며 관리할 수 있습니다. 또한 Docker 사용자 인증 정보 도우미 명령줄 도구를 사용하면 Container Registry로 직접 인증하도록 Docker를 구성할 수도 있습니다.

레지스트리 이름

Container Registry의 레지스트리는 호스트와 프로젝트 ID를 기준으로 명명됩니다. 이미지 작업(내보내기, 가져오기, 삭제 등)을 하려면, 다음 형식을 이용해 이미지를 식별해야 합니다.

[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]
    

또는

[HOSTNAME]/[PROJECT-ID]/[IMAGE]@[IMAGE_DIGEST]
    

각 항목의 의미는 다음과 같습니다.

  • [HOSTNAME]은 이미지가 저장된 위치입니다.

    • gcr.io는 현재 미국 내 이미지를 호스팅하지만 향후 위치가 변경될 수 있습니다.
    • us.gcr.io는 미국 내 이미지를 gcr.io가 호스팅하는 이미지와 별도의 스토리지 버킷에서 호스팅합니다.
    • eu.gcr.io는 유럽 연합 내 이미지를 호스팅합니다.
    • asia.gcr.io는 아시아의 이미지를 호스팅합니다.

    이 위치는 Cloud Storage 스토리지 버킷의 멀티 리전에 해당합니다. 이미지를 새로운 호스트 이름으로 레지스트리에 내보내면 Container Registry는 지정된 멀티 리전에 스토리지 버킷을 만듭니다. 이 버킷은 레지스트리의 기본 스토리지입니다. 프로젝트 내에서 호스트 이름이 동일한 모든 레지스트리는 스토리지 버킷 하나를 공유합니다.

  • [PROJECT-ID]는 Google Cloud Console 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함된 경우 아래의 도메인 범위 프로젝트를 참조하세요.

  • [IMAGE]는 이미지의 이름입니다. 이미지의 로컬 이름과 다를 수도 있습니다. Google Cloud Console에서 프로젝트의 레지스트리는 이미지 이름으로 표시됩니다. 각 저장소는 이름이 같은 여러 이미지를 보유할 수 있습니다. 예를 들어 'quickstart-image'라는 이미지의 다양한 버전을 보유할 수 있습니다.

  • :[TAG]@[IMAGE_DIGEST]를 끝에 추가하면 이미지의 특정 버전을 구별할 수 있지만 이는 선택사항입니다. 태그 또는 다이제스트를 지정하지 않으면 Container Registry가 기본 태그 latest가 있는 이미지를 찾습니다. 아래 레지스트리 내의 이미지 버전을 참조하세요.

예를 들어 빠른 시작에서 빠른 시작 이미지의 레지스트리는 gcr.io/[PROJECT-ID]입니다. 이미지를 내보내고 가져오려면 다음 형식을 사용합니다.

gcr.io/[PROJECT-ID]/quickstart-image:tag1
    

여기서 [PROJECT-ID]는 Google Cloud Console 프로젝트 ID입니다.

레지스트리 내의 이미지 버전

레지스트리에는 다양한 이미지가 포함될 수 있으며 이러한 이미지의 버전은 다양할 수 있습니다. 레지스트리 내에서 이미지의 특정 버전을 식별하려면 이미지의 태그 또는 다이제스트를 지정하면 됩니다. 태그는 레지스트리 내에서 이미지별로 고유합니다. 다이제스트는 자동으로 생성되고 이미지 버전별로 고유하며 @[IMAGE_DIGEST] 형식입니다. 여기서 [IMAGE_DIGEST]는 이미지 콘텐츠의 sha256 해시 값입니다.

예를 들어 빠른 시작에서 이미지 특정 버전을 식별하는 방법은 다음과 같습니다.

  • 이미지의 태그를 추가합니다.

    gcr.io/[PROJECT-ID]/quickstart-image:tag1
        
  • 또는 이미지의 다이제스트를 추가합니다.

    gcr.io/[PROJECT-ID]/quickstart-image@sha256:4d11e24ba8a615cc85a535daa17b47d3c0219f7eeb2b8208896704ad7f88ae2d
        

여기서 [PROJECT-ID]는 Google Cloud Console 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함된 경우 아래의 도메인 범위 프로젝트를 참조하세요.

Console에서 이미지 화면의 태그 열에는 이미지의 태그가 나열됩니다. 이미지 다이제스트를 포함한 메타데이터를 확인하려면 이미지의 버전을 클릭하세요.

태그 수정 방법은 이미지 태그하기를 참조하세요.

도메인 범위 프로젝트

프로젝트 범위가 도메인인 경우 프로젝트 ID의 도메인 이름 뒤에 콜론(:)이 포함됩니다. Docker가 콜론을 처리하는 방법으로 인해 Container Registry에서 이미지 다이제스트를 지정할 때 콜론 문자를 슬래시로 바꾸어야 합니다. 다음 형식을 사용하여 이러한 유형의 프로젝트에서 이미지를 식별합니다.

[HOSTNAME]/[DOMAIN]/[PROJECT]/[IMAGE]
    

예를 들어 ID가 example.com:my-project인 프로젝트에는 다음 이미지가 있을 수 있습니다.

gcr.io/example.com/my-project/image-name
    

URL로서의 레지스트리 이름

https://[HOSTNAME]/[PROJECT-ID]/[IMAGE] URL은 Cloud Console의 레지스트리에 대한 URL입니다. 레지스트리에 액세스할 수 있는 권한이 있는 인증된 사용자 누구나 이러한 링크를 사용할 수 있습니다. 레지스트리 이름을 만드는 방법은 위 설명을 참조하세요.

예를 들어 다음 URL은 Cloud Console의 공개 레지스트리에 연결됩니다.

컨테이너 이미지 형식

Container Registry는 Docker 이미지 매니페스트 V2와 OCI 이미지 형식을 지원합니다.

자세한 내용은 컨테이너 이미지 형식을 참조하세요.

액세스 제어

Container Registry는 컨테이너 이미지의 태그와 레이어 파일을 레지스트리와 같은 프로젝트에 있는 Cloud Storage 버킷에 저장합니다. 버킷에 대한 액세스는 Cloud Storage의 ID 및 액세스 관리(IAM) 설정을 통해 구성됩니다.

기본적으로 프로젝트 소유자와 편집자는 프로젝트의 Container Registry 버킷에 대한 내보내기/가져오기 권한을 가집니다. 프로젝트 뷰어는 내보내기 권한만 가집니다.

자세한 내용은 액세스 제어 구성을 참조하세요.

이미지 메타데이터를 Cloud Storage에서 고성능 백엔드 데이터베이스로 이동하는 계획은 Container Registry 지원 중단 알림을 참조하세요.

인증

이미지를 내보내거나 가져오려면 인증을 구성해야 합니다. gcloud 명령줄 도구를 사용하여 Container Registry에 대한 요청을 인증하도록 Docker를 구성할 수 있습니다. Container Registry는 액세스 토큰이나 JSON 키 파일을 사용한 고급 인증 방식도 지원합니다.

Docker 사용자 인증 정보 도우미

Docker는 이미지를 내보내고 가져올 때 Container Registry에 액세스해야 합니다. Docker 사용자 인증 정보 도우미 명령줄 도구를 사용하면 Container Registry 사용자 인증 정보를 Docker에서 사용하도록 구성할 수 있습니다.

사용자 인증 정보 도우미는 Container Registry 사용자 인증 정보를 자동으로 또는 --token-source 플래그로 지정한 위치에서 가져온 후 Docker의 구성 파일에 기록합니다. 이렇게 하면 Docker 명령줄 도구 docker를 사용하여 Container Registry와 직접 상호작용할 수 있습니다.

자세한 내용은 고급 인증을 참조하세요.

Container Registry 서비스 계정

Container Registry API를 사용 설정하면 Container Registry는 프로젝트에 서비스 계정을 추가합니다. 이 서비스 계정은 다음과 같은 이름을 가집니다.

service-[PROJECT_NUMBER]@containerregistry.iam.gserviceaccount.com
    

이러한 Container Registry 서비스 계정은 Container Registry가 프로젝트에서 서비스 업무를 수행하도록 특별히 설계되었습니다. Google 소유 계정이더라도 이 계정은 프로젝트에 따라 달라지며 Cloud Console의 서비스 계정과 IAM 섹션에 나열됩니다.

이 서비스 계정을 삭제하거나 권한을 변경하면 특정 Container Registry 기능이 정상적으로 작동하지 않습니다. 역할을 수정하거나 계정을 삭제해서는 안 됩니다.

미러

mirror.gcr.io 레지스트리는 Docker Hub의 공식 저장소의 전역 Container Registry 미러입니다.

미러를 사용하면 Docker Hub 저장소의 가져오기 속도를 높일 수 있습니다. mirror.gcr.io를 사용하면 클라이언트는 먼저 Container Registry 미러에서 Docker Hub 공식 이미지를 가져오려고 시도합니다.

자세한 내용은 Container Registry 및 Docker Hub 미러 사용을 참조하세요.

알림

Pub/Sub를 사용하여 컨테이너 이미지의 변경 사항에 대한 알림을 받을 수 있습니다.

자세한 내용은 Pub/Sub 알림 구성을 참조하세요.

Google Cloud에서 Container Registry 사용

Compute Engine 인스턴스와 Google Kubernetes Engine 클러스터는 인스턴스의 Cloud Storage 범위에 따라 Container Registry 이미지를 내보내고 가져올 수 있습니다. Google Cloud에서 Container Registry 사용을 참조하세요.

Container Registry에 저장된 이미지를 App Engine 가변형 환경에 배포할 수 있습니다.

지속적 배포 툴 통합

Container Registry는 널리 사용되는 다양한 지속적 배포 시스템과 호환됩니다.

Container Registry를 타사 솔루션과 함께 사용

애플리케이션을 개발할 때 Google Cloud 외부에서 타사 클러스터 관리, 지속적 통합 또는 기타 솔루션을 사용하려 할 수 있습니다. Container Registry는 이러한 외부 서비스와 통합될 수 있습니다.

이러한 솔루션은 인증용 gcloud 명령줄 도구에 대한 액세스 권한을 제공하지 않을 수 있습니다. 이러한 경우에는 docker login을 사용하여 Container Registry에 직접 인증할 수 있습니다. 자세한 내용은 고급 인증을 참조하세요.

Kubernetes와 같은 일부 타사 솔루션은 Container Registry와 통합 관련 문서를 제공합니다.

Container Registry와 통합되는 타사 솔루션의 전체 목록은 지속적 배포 도구 통합을 참조하세요.