Google Cloud에서 Container Registry 사용

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

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

일반 액세스 요구사항

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

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

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

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

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

Cloud 빌드

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

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

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

Compute Engine

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

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

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

컨테이너 최적화 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 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 개요를 참조하세요.

App Engine 가변형 환경

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

가변형 환경은 Cloud Build를 이용해 컨테이너 이미지를 자동으로 구축하고 Container Registry에 저장합니다.

필수 권한

이미지를 내보내거나 가져오는 데 사용할 VM 인스턴스와 Container Registry 스토리지 버킷이 동일한 Google Cloud 프로젝트에 있으면 Compute Engine 기본 서비스 계정이 이미지를 내보내거나 가져오는 데 적절한 권한을 가지도록 구성됩니다.

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

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

App Engine에 배포

gcloud 명령줄 도구를 사용하여 Container Registry에서 호스팅하는 이미지를 App Engine에 배포할 수 있습니다.

이미지의 루트 디렉터리에서 gcloud beta app gen-config 명령어를 사용하면 App Engine에 배포하는 데 필요한 app.yaml 파일을 자동으로 생성할 수 있습니다. 아니면 파일을 직접 작성해도 됩니다.

App Engine 구성 파일을 생성하고, Docker 이미지를 구성하고, 이미지를 Container Registry로 내보내고 나서 다음 명령어를 실행하면 이미지를 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를 찾습니다.