Google Cloud에서 Container Registry 사용

빌드 및 배포 워크플로를 단순화하기 위해 일부 Google Cloud 서비스 계정 및 런타임 환경에는 동일한 프로젝트에 저장된 컨테이너에 액세스할 수 있는 권한이 사전 구성되어 있습니다.

이 페이지에서는 Google Cloud 제품과의 일반적인 통합 및 컨테이너에 액세스하기 위한 관련 요구사항을 요약합니다.

일반 액세스 요구사항

기본적으로 일부 일반적인 통합의 서비스 계정은 동일한 프로젝트 내의 Container Registry에 액세스할 수 있도록 Cloud Storage 권한으로 구성됩니다.

Google Kubernetes Engine 클러스터의 VM을 포함하여 Compute Engine VM에서 사용하는 서비스 계정의 경우 액세스는 IAM 권한과 스토리지 액세스 범위를 기반으로 합니다.

다음과 같은 경우에는 직접 권한을 구성하거나 수정해야 합니다.

  • 한 프로젝트의 서비스 계정을 사용하여 다른 프로젝트의 Container Registry에 액세스하는 경우
  • 스토리지에 대한 읽기 전용 액세스 권한이 있는 기본 서비스 계정을 사용 중이지만 이미지를 가져오거나 내보내려는 경우
  • 커스텀 서비스 계정을 사용하여 Container Registry와 상호작용

자세한 내용은 제품별 섹션을 참조하세요.

Cloud Build

기본적으로 Cloud Build 서비스 계정에는 Container Registry가 동일한 프로젝트에 있을 때 이미지를 내보내고 가져올 수 있는 권한이 있습니다.

다음과 같은 경우 적절한 권한을 직접 구성해야 합니다.

  • Cloud Build가 빌드에 액세스할 저장소와는 다른 프로젝트에 있습니다.
  • 빌드가 기본 Cloud Build 서비스 계정이 아닌 서비스 계정을 사용하고 있습니다. 이 경우 서비스 계정에 Container Registry에 액세스 할 수 있는 권한을 부여해야 합니다.

Compute Engine

Container Registry에 저장된 이미지를 사용하여 VM 인스턴스를 만들 수 있습니다.

필수 권한

VM 인스턴스와 Container Registry가 동일한 Google Cloud 프로젝트에 있으면 Compute Engine 기본 서비스 계정은 이미지를 가져올 수 있는 권한으로 구성됩니다.

VM 인스턴스가 다른 프로젝트에 있거나 VM 인스턴스가 다른 서비스 계정을 사용하는 경우 Container Registry에서 사용하는 스토리지 버킷에 액세스할 수 있는 적절한 권한을 서비스 계정에 부여해야 합니다.

기본적으로 Compute Engine VM에는 스토리지 버킷에 대해 read-only 액세스 범위가 구성되어 있습니다. 비공개 Docker 이미지를 내보내려면 VM 인스턴스에 read-write 스토리지 액세스 범위가 있어야 합니다.

권한 및 액세스 범위에 대한 자세한 내용은 Google Cloud 서비스와 통합을 참조하세요.

이미지 배포

VM을 만들 때 VM에 이미지를 배포할 수 있습니다. 자세한 내용은 Compute Engine 문서에서 컨테이너 배포VM 인스턴스 템플릿 만들기를 참조하세요.

컨테이너 최적화 Compute Engine 인스턴스

레지스트리에 있는 이미지를 이용해 컨테이너 최적화 Compute Engine 인스턴스를 시작하는 방법에 대한 자세한 내용은 cloud-config를 통한 Docker 컨테이너 시작을 참조하세요.

추가 정보는 인스턴스 만들기 및 구성에서 확인할 수 있습니다.

Google Kubernetes Engine

Google Kubernetes Engine은 클러스터 노드의 VM 인스턴스에 구성된 서비스 계정을 사용하여 이미지를 내보내고 가져옵니다.

필수 권한

Google Kubernetes Engine 클러스터와 Container Registry 스토리지 버킷이 동일한 Google Cloud 프로젝트에 있는 경우 Compute Engine 기본 서비스 계정은 이미지를 내보내거나 가져오는 데 적절한 권한을 가지도록 구성됩니다.

클러스터가 다른 프로젝트에 있거나 클러스터의 VM이 다른 서비스 계정을 사용하는 경우 Container Registry에서 사용하는 스토리지 버킷에 액세스할 수 있는 적절한 권한을 서비스 계정에 부여해야 합니다.

기본적으로 Compute Engine VM에는 스토리지 버킷에 대해 read-only 액세스 범위가 구성되어 있습니다. 비공개 Docker 이미지를 내보내려면 VM 인스턴스에 read-write 스토리지 액세스 범위가 있어야 합니다.

권한 및 액세스 범위에 대한 자세한 내용은 Google Cloud 서비스와 통합을 참조하세요.

이미지 실행

다음 명령어를 사용하면 Google Kubernetes Engine 클러스터에서 Container Registry 이미지를 실행할 수 있습니다.

kubectl run [NAME] --image=[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]

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

  • [NAME]은 리소스 이름입니다.
  • [HOSTNAME]은 Console의 Location에 나열됩니다. 4가지 옵션인 gcr.io, us.gcr.io, eu.gcr.io 또는 asia.gcr.io 중 하나입니다.
  • [PROJECT-ID]는 Google Cloud Console 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함되어 있으면 도메인 범위 프로젝트를 참조하세요.
  • [IMAGE]는 Container Registry에 있는 이미지의 이름입니다.
  • [TAG]는 Container Registry에 있는 이미지의 버전을 식별하는 태그입니다. 태그를 지정하지 않으면 Container Registry가 기본 태그 latest를 찾습니다.

Kubernetes 명령어에 대한 자세한 내용은 kubectl 개요를 참조하세요.

Cloud Run

Container Registry에 저장된 이미지를 Cloud Run에 배포할 수 있습니다.

필수 권한

Cloud Run에 배포하려면 소유자 또는 편집자 역할이나 Cloud Run 관리자 및 서비스 계정 사용자 역할 또는 이 특정 권한 목록에 대해 자세히 알아보세요.

이미지 배포

Cloud Run에 이미지를 배포하는 방법은 Cloud Run 문서를 참조하세요.

App Engine 가변형 환경

App Engine 가변형 환경을 이용해 기존 런타임(예: 자바 8)을 맞춤설정하거나, 커스텀 Docker 이미지 또는 Dockerfile을 제공해 자체 런타임을 제공할 수도 있습니다.

Cloud Build를 사용하면 컨테이너 빌드를 자동화하고 Container Registry로 푸시한 후 App Engine에 배포할 수 있습니다.

필수 권한

기본적으로 App Engine 기본 서비스 계정에는 동일한 프로젝트의 저장소에서 가져오고 저장소로 내보낼 수 있는 권한이 있습니다.

App Engine이 다른 프로젝트에 있는 경우 Container Registry 저장소에 액세스할 수 있는 권한을 App Engine 서비스 계정에 부여해야 합니다.

App Engine에 배포

Google Cloud CLI를 사용하여 Container Registry에서 호스팅하는 이미지를 App Engine에 배포할 수 있습니다.

  1. 앱의 App Engine 구성 파일을 만듭니다.
  2. Docker 이미지를 빌드하고 저장소에 내보냅니다. Cloud Build를 사용하여 컨테이너를 저장소에 빌드하고 푸시할 수 있습니다.
  3. 다음 명령어를 실행하여 이미지를 App Engine에 배포합니다.

    gcloud app deploy --image-url=[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]
    

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

  • [HOSTNAME]은 Console의 Location에 나열됩니다. 4가지 옵션인 gcr.io, us.gcr.io, eu.gcr.io 또는 asia.gcr.io 중 하나입니다.
  • [PROJECT-ID]는 Google Cloud Console 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함되어 있으면 도메인 범위 프로젝트를 참조하세요.
  • [IMAGE]는 Container Registry에 있는 이미지의 이름입니다.
  • [TAG]는 Container Registry에 있는 이미지의 버전을 식별하는 태그입니다. 태그를 지정하지 않으면 Container Registry가 기본 태그 latest를 찾습니다.