이 페이지에서는 Compose 사양을 기반으로 하는 파일을 사용하여 Cloud Run에 서비스를 배포하는 방법을 설명합니다.
다음과 같은 방법으로 Compose 파일을 사용하여 Cloud Run에 배포할 수 있습니다.
Compose를 사용하여 Cloud Run에 배포하는 것은 개발에 적합하며 로컬 환경에서 클라우드 환경으로의 전환을 간소화합니다. 이를 통해 로컬 애플리케이션과 배포된 애플리케이션 모두에 대해 일관된 구성 형식을 유지할 수 있습니다.
코드형 인프라 (IaC) 환경에서 프로덕션 환경을 관리하려면 Terraform을 사용하는 것이 좋습니다.
제한사항
- Compose 배포는 여러 컨테이너가 있는 단일 Cloud Run 서비스를 배포합니다.
- Compose 배포는 지원되는 Cloud Run 기능의 하위 집합만 변환합니다.
- Compose를 사용하여 만든 서비스는 기본적으로 최대 인스턴스 1개로 설정됩니다.
- 배포를 간소화하지만 Cloud Run Compose 배포는 프로덕션 환경을 위한 포괄적인 코드형 인프라 전략을 대체하지 않습니다.
Compose를 사용하여 컨테이너 이미지에서 서비스 배포
compose.yaml 파일에서 서비스를 정의하고 기존 컨테이너 이미지에서 서비스를 배포합니다. 자세한 내용은 컨테이너 이미지 배포를 참고하세요.
예: 단일 서비스 애플리케이션
다음 예시는 사전 빌드된 컨테이너 이미지를 사용하는 웹 서비스의 compose.yaml 파일을 보여줍니다.
services:
web:
image: us-docker.pkg.dev/cloudrun/container/hello
ports:
- "8080:8080"
서비스 배포
서비스를 배포하려면
gcloud beta run compose up명령어를 실행합니다.gcloud beta run compose up compose.yaml필요한 구성요소를 설치하거나 API를 사용 설정하라는 메시지가 표시되면
y로 응답합니다.선택사항: 서비스에 대한 인증되지 않은 액세스를 허용하려면 서비스를 공개로 설정합니다.
배포 후 Cloud Run 서비스 URL이 표시됩니다. 이 URL을 복사하여 브라우저에 붙여넣어 실행 중인 컨테이너를 확인합니다. Google Cloud 콘솔에서 기본 인증을 사용 중지할 수 있습니다.
Compose를 사용하여 소스에서 배포
compose.yaml 파일에서 서비스를 정의하고 소스 코드에서 빌드하여 배포합니다. 자세한 내용은 소스 코드에서 서비스 배포를 참고하세요.
예: 단일 서비스 애플리케이션
다음 예는 현재 디렉터리의 소스에서 빌드되는 웹 서비스의 compose.yaml 파일을 보여줍니다.
services:
web:
build: .
ports:
- "8080:8080"
서비스 배포
프로젝트 디렉터리에서 서비스 정의가 포함된
compose.yaml파일을 만듭니다.서비스를 배포하려면
gcloud beta run compose up명령어를 실행합니다.gcloud beta run compose up compose.yaml필요한 구성요소를 설치하거나 API를 사용 설정하라는 메시지가 표시되면
y로 응답합니다.선택사항: 서비스에 대한 인증되지 않은 액세스를 허용하려면 서비스를 공개로 설정합니다.
배포 후 Cloud Run 서비스 URL이 표시됩니다. 이 URL을 복사하여 브라우저에 붙여넣어 실행 중인 컨테이너를 확인합니다. Google Cloud 콘솔에서 기본 인증을 사용 중지할 수 있습니다.
지원되는 기능
compose.yaml 파일을 사용하여 배포하면 Cloud Run에서 Compose 파일에 정의된 다른 Google Cloud 리소스를 자동으로 프로비저닝할 수 있습니다. 리소스가 필요한 경우 Cloud Run에서 리소스를 만들기 전에 동의를 요청합니다.
Cloud Run은 다음과 같은 Compose 기능의 하위 집합을 지원합니다.
| Compose 필드 | Cloud Run 매핑 및 설명 |
|---|---|
services |
서비스는 배포된 Cloud Run 서비스의 개별 컨테이너에 매핑됩니다. |
volumes |
일부 지원됩니다. |
secrets |
지원됨 Secret Manager 사용 |
configs |
지원됨 Cloud Storage 사용 |
build |
Cloud Build는 빌드 컨텍스트를 사용하여 컨테이너를 빌드하고 Artifact Registry의 |
image |
지원되는 레지스트리에서 사전 빌드된 컨테이너 이미지를 배포합니다. 사전 빌드된 이미지가 있는 경우 사용합니다. Docker Hub 및 Artifact Registry 이미지만 지원합니다. 맞춤 이미지의 경우 이미지를 Artifact Registry로 푸시하여 사용할 수 있습니다. |
ports |
수신 컨테이너를 결정하는 포트 매핑 목록(예: |
expose |
종속 서비스가 통신에 사용할 수 있는 포트를 갖도록 |
depends_on |
컨테이너 시작 순서를 정의합니다. 이렇게 하면 |
cpu_count/cpus |
Cloud Run CPU 및 메모리 한도를 설정하는 데 사용되는 힌트로, 다음 로직에 따라 리소스를 자동으로 할당합니다.
|
container_name |
종속성 해결을 위한 컨테이너의 이름을 설정합니다. 지정하지 않으면 서비스 이름이 기본값입니다. |
environment |
Cloud Run의 해당 컨테이너에 환경 변수를 전달합니다. |
command |
컨테이너에서 선언한 컨테이너의 기본 명령어를 Cloud Run의 |
entrypoint |
지원됨 |
env_file |
지원됨 |
x-google-cloudrun:ingress-container |
(확장 프로그램) 이 Google 관련 확장 프로그램을 서비스에 추가하고 |
x-google-cloudrun:volume-type: in-memory |
(확장 프로그램) 이 Google 전용 확장 프로그램을 볼륨에 추가하고 Cloud Storage로 지원되는 기본 볼륨 대신 |
Secret Manager에 매핑된 보안 비밀
compose.yaml 파일에 secrets이 정의되어 있으면 gcloud CLI에서 이 데이터를 저장하도록 Secret Manager 보안 비밀을 프로비저닝합니다.
Cloud Storage에 매핑된 볼륨 및 구성
compose.yaml 파일이 최상위 volumes 또는 configs를 정의하는 경우 gcloud CLI는 이 데이터를 관리하기 위해 Cloud Storage 버킷을 프로비저닝합니다. 볼륨과 구성을 구분하는 폴더를 사용하여 배포당 하나의 버킷이 생성됩니다.
- 이름이 지정된 볼륨: 볼륨 이름에 해당하는 빈 폴더가 버킷에 생성됩니다.
- 바인드 마운트: 바인드 마운트의 경우 Cloud Run은 배포 전에 로컬 소스 디렉터리의 콘텐츠를 버킷의 폴더에 업로드합니다.
- 구성:
file:소스로 정의된 각 구성에 대해 Cloud Run은 로컬 파일의 콘텐츠를 버킷의 폴더에 업로드합니다.
필요한 역할
배포 중에 Cloud Run은 프로비저닝된 리소스에 액세스하는 데 필요한 역할을 배포된 서비스의 서비스 ID에 자동으로 부여합니다.
- Cloud Storage 버킷:
roles/storage.objectUser - Secret Manager 보안 비밀:
roles/secretmanager.secretAccessor
동일한 인스턴스의 컨테이너 간 통신
Cloud Run은 각 컨테이너의 /etc/hosts 파일에 항목을 추가합니다. 이 항목은 compose.yaml 파일의 서비스 이름을 내부 IP 주소에 매핑하므로 서비스가 서비스 이름을 사용하여 서로 통신할 수 있습니다.