컨테이너 구성

이 페이지에서는 Cloud Run 서비스의 컨테이너 포트, 진입점 명령어, 인수를 구성하는 방법을 설명합니다.

Cloud Run은 컨테이너를 시작할 때 이미지의 기본 진입점 명령어 및 기본 명령어 인수를 실행합니다. 이미지의 기본 진입점 및 명령어 인수를 재정의하려면 컨테이너 구성에서 commandargs 필드를 사용하면 됩니다. command 필드는 컨테이너에서 실행하는 실제 명령어를 지정합니다. args 필드는 해당 명령어로 전달되는 인수를 지정합니다.

각 서비스에서 컨테이너당 최대 1,000개의 인수를 사용할 수 있습니다.

필요한 역할

Cloud Run 서비스를 구성하고 배포하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.

Cloud Run과 연결된 IAM 역할 및 권한 목록은 Cloud Run IAM 역할Cloud Run IAM 권한을 참조하세요. Cloud Run 서비스가 Cloud 클라이언트 라이브러리와 같은 Google Cloud API와 상호작용하는 경우에는 서비스 ID 구성 가이드를 참조하세요. 역할 부여에 대한 자세한 내용은 배포 권한액세스 관리를 참조하세요.

컨테이너 포트 구성

구성을 변경하면 새 버전이 생성됩니다. 이를 변경하는 명시적 업데이트가 없으면 이후 버전에도 이 구성 설정이 자동으로 적용됩니다.

Cloud Run 서비스의 경우 Cloud Run이 PORT 환경 변수를 컨테이너에 삽입합니다. 서비스에 여러 컨테이너를 배포하는 경우 인그레스 컨테이너입니다. 컨테이너는 하드코딩된 특정 포트가 아닌 PORT 환경 변수에서 정의된 포트를 리슨합니다. 그럴 수 없다면 컨테이너로 요청을 보내는 포트에서 리슨하도록 구성합니다. 포트 설정은 Cloud Run 작업에 적용되지 않습니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Run으로 이동합니다.

    Cloud Run으로 이동

  2. 컨테이너 배포를 클릭하고 서비스를 선택하여 새 서비스를 구성합니다. 기존 서비스를 구성하는 경우 서비스를 클릭한 후 새 버전 수정 및 배포를 클릭합니다.

  3. 새 서비스를 구성하는 경우 초기 서비스 설정 페이지를 작성한 후 컨테이너, 볼륨, 네트워킹, 보안을 클릭하여 서비스 구성 페이지를 펼칩니다.

  4. 컨테이너 탭을 클릭합니다.

    이미지

    • 기본값이 8080이 아닌 경우 요청을 전송할 포트를 지정합니다. 이렇게 하면 PORT 환경 변수도 설정됩니다.
  5. 만들기 또는 배포를 클릭합니다.

gcloud

다음 명령어를 사용하여 서비스의 포트 구성을 업데이트할 수 있습니다.

gcloud run services update SERVICE --port PORT

다음과 같이 바꿉니다.

  • SERVICE: 서비스 이름
  • PORT: 요청을 전송할 포트. 기본 포트는 8080입니다.

배포 중에 다음 명령어를 사용하여 포트를 구성할 수도 있습니다.

gcloud run deploy --image IMAGE_URL --port PORT

IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest)로 바꿉니다. Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.

YAML

  1. 새 서비스를 만드는 경우에는 이 단계를 건너뜁니다. 기존 서비스를 업데이트하는 경우 YAML 구성을 다운로드합니다.

    gcloud run services describe SERVICE --format export > service.yaml
  2. containerPort: 속성을 업데이트합니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            ports:
            - containerPort: PORT
    

    다음과 같이 바꿉니다.

    • SERVICE: Cloud Run 서비스 이름
    • IMAGE_URL: 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest). Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • PORT: 요청을 전송할 포트
    • REVISION: 새 버전 이름으로 변경하거나 이미 있는 경우 삭제 가능. 새 버전 이름을 제공할 경우 다음 기준을 반드시 충족해야 합니다.
      • SERVICE-로 시작해야 합니다.
      • 소문자, 숫자, -만 포함합니다.
      • -로 끝나면 안 됩니다.
      • 63자(영문 기준) 이하여야 합니다.
  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud run services replace service.yaml

진입점 및 인수 구성

구성을 변경하면 새 버전이 생성됩니다. 이를 변경하는 명시적 업데이트가 없으면 이후 버전에도 이 구성 설정이 자동으로 적용됩니다.

지정된 컨테이너 명령어 및 인수는 기본 이미지 ENTRYPOINTCMD를 재정의합니다.

새 서비스를 만들거나 새 버전을 배포할 때 Google Cloud 콘솔, Google Cloud CLI 또는 YAML 파일을 사용하여 진입점 명령어 및 인수를 설정할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Run으로 이동합니다.

    Cloud Run으로 이동

  2. 컨테이너 배포를 클릭하고 서비스를 선택하여 새 서비스를 구성합니다. 기존 서비스를 구성하는 경우 서비스를 클릭한 후 새 버전 수정 및 배포를 클릭합니다.

  3. 새 서비스를 구성하는 경우 초기 서비스 설정 페이지를 작성한 후 컨테이너, 볼륨, 네트워킹, 보안을 클릭하여 서비스 구성 페이지를 펼칩니다.

  4. 컨테이너 탭을 클릭합니다.

    이미지

    • 컨테이너에 정의된 명령어가 아닌 경우 컨테이너를 실행할 명령어를 지정하고, 원할 경우 진입점 명령어에 대한 인수를 지정합니다.
  5. 만들기 또는 배포를 클릭합니다.

gcloud

기존 서비스의 시작 명령어 및 인수를 업데이트하려면 다음 안내를 따르세요.

gcloud run services update SERVICE --command COMMAND --args ARG1,ARG-N

다음과 같이 바꿉니다.

  • COMMAND: 기본 명령어를 사용하지 않는 경우 컨테이너가 시작되는 명령어
  • ARG1: 컨테이너 명령어로 전송 중인 인수. 두 개 이상의 인수에는 쉼표로 구분된 목록을 사용합니다.

새 서비스 또는 기존 서비스를 배포하는 동안 진입점 및 인수를 지정하려면 다음 명령어를 실행합니다.

gcloud run deploy --image IMAGE_URL --command COMMAND --args ARG1,ARG-N

IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest)로 바꿉니다. Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.

설정한 진입점 명령어 및 인수를 삭제하려면(컨테이너 기본값으로 복원) 다음과 같이 빈 문자열을 제공합니다.

gcloud run deploy --image IMAGE_URL --command "" --args ""

YAML

  1. 새 서비스를 만드는 경우에는 이 단계를 건너뜁니다. 기존 서비스를 업데이트하는 경우 YAML 구성을 다운로드합니다.

    gcloud run services describe SERVICE --format export > service.yaml
  2. command 속성과 args 속성을 업데이트합니다.

    spec:
      containers:
      - image: IMAGE_URL
        command:
        - COMMAND
        args:
        - "ARG1"
        - "ARG-N"
    

    다음과 같이 바꿉니다.

    • IMAGE_URL: 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest). Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • COMMAND를 기본 명령어를 사용하지 않는 경우 컨테이너가 시작되는 명령어로 바꿉니다.
    • ARG1: 컨테이너 명령어로 전송 중인 인수. 여러 인수를 사용하는 경우 각 행에 각각 지정합니다(예: ARG-N).
  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud run services replace service.yaml

Terraform

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

다음 google_cloud_run_v2_service 리소스는 명령어와 인수를 지정합니다. /server를 컨테이너를 시작하는 데 사용되는 명령어로 바꾸고 필요한 인수를 args 배열에 추가합니다.

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-containers"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      # Container "entry-point" command
      command = ["/server"]

      # Container "entry-point" args
      args = []
    }
  }
}

인수에 등호 또는 쉼표 사용

인수에 등호를 사용하는 경우 다음 형식을 사용합니다.

gcloud run deploy  \
  --args="--repo-allowlist=github.com/example/example_demo"

인수에 쉼표를 사용하는 경우 쉼표 이스케이프 처리에 대한 자세한 내용은 환경 변수 구성을 참조하세요.

사이드카 배포를 위한 컨테이너 시작 순서 구성

사이드카 배포에서 컨테이너 시작 순서를 지정하려면 컨테이너 종속 항목 기능을 사용합니다. 종속 항목이 있는 컨테이너를 지정하고 종속된 컨테이너를 나열합니다. 해당 컨테이너는 먼저 시작됩니다. 종속 항목이 없는 컨테이너는 항상 동시에 먼저 시작됩니다.

이 기능을 성공적으로 사용하려면 시작 상태 점검 프로브를 사용해야 합니다. 시작 프로브를 사용하면 Cloud Run이 종속 컨테이너의 상태를 검사하여 통과 여부를 확인한 후에 다음 컨테이너를 시작할 수 있습니다. 상태 확인을 사용하지 않으면 종속된 컨테이너 시작에 실패하더라도 컨테이너가 지정된 순서로 시작됩니다.

인그레스 컨테이너에는 기본 시작 상태 점검 프로브가 있습니다.

Google Cloud 콘솔, Google Cloud CLI 또는 YAML을 사용하여 시작 순서를 지정할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Run 페이지로 이동합니다.

    Cloud Run으로 이동

    • 기존 서비스의 경우 목록에서 서비스를 클릭하고 새 버전 수정 및 배포를 선택하여 버전 배포 양식을 표시합니다.
    • 새 서비스의 경우 컨테이너 배포를 클릭하고 서비스를 선택하여 서비스 만들기 양식을 표시합니다.
  2. 새 서비스의 경우 서비스 이름, 인그레스 컨테이너 URL, CPU 할당, 인그레스 컨트롤, 인증을 지정합니다. 컨테이너, 볼륨, 네트워킹, 보안 탭에서 다음을 수행합니다.

    1. 인그레스 컨테이너를 구성합니다.
    2. 배포 중인 다른 컨테이너를 각각 추가하려면 컨테이너 추가를 클릭합니다.
    3. 인그레스 컨테이너를 제외한 모든 컨테이너의 경우 시작 상태 점검을 구성합니다. 인그레스 컨테이너에는 기본 시작 상태 점검이 있습니다.
    4. 다른 컨테이너가 먼저 시작되어야 특정 컨테이너를 시작할 수 있는 경우 컨테이너 시작 순서 메뉴를 사용하여 먼저 시작해야 하는 컨테이너를 선택합니다.
  3. 기존 서비스의 경우 다음 단계를 따르세요.

    1. 인그레스 컨테이너를 제외한 모든 컨테이너의 경우 시작 상태 점검을 구성합니다. 인그레스 컨테이너에는 기본 시작 상태 점검이 있습니다.
    2. 각 컨테이너는 자체 컨테이너 시작 순서 메뉴와 함께 표시됩니다. 다른 컨테이너가 먼저 시작되어야 특정 컨테이너를 시작할 수 있는 경우 컨테이너 시작 순서 메뉴를 사용하여 먼저 시작해야 하는 컨테이너를 선택합니다.
  4. 다른 필수 구성을 모두 완료한 후 새 서비스의 경우 만들기를, 기존 서비스의 경우 배포를 클릭합니다. 배포가 완료될 때까지 기다립니다.

gcloud

Google Cloud CLI를 사용하여 시작 순서를 지정하려면 먼저 인그레스 컨테이너를 제외한 모든 컨테이너에 시작 상태 점검을 구성해야 합니다. 인그레스 컨테이너에는 기본 시작 상태 점검이 있습니다. Google Cloud CLI를 사용하여 상태 점검을 구성할 수는 없습니다.

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 지정된 시작 순서에 따라 여러 컨테이너를 서비스에 배포하려면 다음 명령어를 실행합니다.

gcloud run deploy SERVICE \
     --container CONTAINER_1_NAME --image='INGRESS_IMAGE' --port='CONTAINER_PORT' \
     --container CONTAINER_2_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAME \
     --container CONTAINER_3_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAMECONTAINER_2_NAME
  • SERVICE를 배포할 서비스의 이름으로 바꿉니다. 이 매개변수를 완전히 생략할 수 있지만 생략하면 서비스 이름을 입력하라는 메시지가 표시됩니다.
  • CONTAINER_PORT를 인그레스 컨테이너에서 수신 요청을 리슨하는 포트로 바꿉니다. 단일 컨테이너 서비스와 달리 사이드카가 포함된 서비스에는 인그레스 컨테이너에 대한 기본 포트가 없습니다. 인그레스 컨테이너의 컨테이너 포트를 명시적으로 구성해야 하며 포트는 컨테이너 하나에만 노출될 수 있습니다.
  • INGRESS_IMAGE를 요청을 수신해야 하는 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest)로 바꿉니다.
  • SIDECAR_IMAGE를 사이드카 컨테이너 이미지에 대한 참조로 바꿉니다.

    배포 명령어에서 각 컨테이너를 구성하려면 각 컨테이너 구성을 container 매개변수 다음에 제공합니다.

YAML

  1. 새 서비스를 만드는 경우에는 이 단계를 건너뜁니다. 기존 서비스를 업데이트하는 경우 YAML 구성을 다운로드합니다.

    gcloud run services describe SERVICE --format export > service.yaml
  2. container-dependencies 속성을 업데이트합니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/container-dependencies: '{"CONTAINER1":["CONTAINER2"], "CONTAINER3":["CONTAINER1","CONTAINER2"]}'
    

    다음과 같이 바꿉니다.

    • CONTAINER1을 하나 이상의 컨테이너에 종속된 첫 번째 컨테이너의 이름으로 바꿉니다. YAML에서 컨테이너 이름을 설정할 수 있습니다. 컨테이너 이름을 지정하지 않으면 Cloud Run이 자동으로 이름을 생성합니다.
    • CONTAINER2CONTAINER1 전에 시작해야 하는 컨테이너 이름으로 바꿉니다.
    • CONTAINER3을 하나 이상의 컨테이너에 종속된 두 번째 컨테이너 이름으로 바꿉니다.

    YAML 스니펫에 표시된 예시에서 CONTAINER2가 먼저 시작되고 CONTAINER1가 두 번째로 시작되며, CONTAINER3이 마지막으로 시작됩니다.

  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud run services replace service.yaml

컨테이너 설정 보기

Cloud Run 서비스의 현재 컨테이너 설정을 보려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 Cloud Run으로 이동합니다.

    Cloud Run으로 이동

  2. 관심이 있는 서비스를 클릭하여 서비스 세부정보 페이지를 엽니다.

  3. 버전 탭을 클릭합니다.

  4. 오른쪽의 세부정보 패널에서 컨테이너 설정이 컨테이너 탭에 표시됩니다.

gcloud

  1. 다음 명령어를 사용하세요.

    gcloud run services describe SERVICE
  2. 반환된 구성에서 컨테이너 설정을 찾습니다.