使用 Compose 部署服務

本頁說明如何使用以 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"

部署服務

  1. 如要部署服務,請執行 gcloud beta run compose up 指令:

    gcloud beta run compose up compose.yaml

  2. 回應y安裝必要元件或啟用 API 的任何提示。

  3. 選用:公開發布服務,允許未經驗證的存取要求。

    部署完成後,畫面會顯示 Cloud Run 服務網址。複製這個網址並貼到瀏覽器,即可查看正在執行的容器。您可以在 Google Cloud 控制台停用預設驗證。

使用 Compose 從來源部署

compose.yaml 檔案中定義服務,然後從原始碼建構並部署服務。詳情請參閱「從原始碼部署服務」。

範例:單一服務應用程式

以下範例顯示從目前目錄中的來源建構的 Web 服務 compose.yaml 檔案。

services:
  web:
    build: .
    ports:
      - "8080:8080"

部署服務

  • 在專案目錄中,建立包含服務定義的 compose.yaml 檔案。

    1. 如要部署服務,請執行 gcloud beta run compose up 指令:

      gcloud beta run compose up compose.yaml
    2. 回應所有提示,安裝必要元件或啟用 API。y

    3. 選用:公開發布服務,允許未經驗證的存取權。

    部署完成後,畫面會顯示 Cloud Run 服務網址。複製這個網址並貼到瀏覽器,即可查看正在執行的容器。您可以在 Google Cloud 控制台停用預設驗證。

支援功能

使用 compose.yaml 檔案部署時,Cloud Run 會自動佈建 Compose 檔案中定義的其他 Google Cloud 資源。如果需要資源,Cloud Run 會先提示您同意,再建立資源。

Cloud Run 支援下列 Compose 功能子集:

撰寫欄位 Cloud Run 對應和說明
services

服務會對應至已部署 Cloud Run 服務中的個別容器。

volumes

部分支援。將 bindvolumetmpfs 掛接點轉換為 Cloud Run 對應項目。

secrets

支援。使用 Secret Manager。

configs

支援。使用 Cloud Storage。

build

Cloud Build 會使用建構內容建構容器,並標記及推送至 Artifact Registry 中的 cloud-run-source-deploy 存放區。

image

從支援的登錄檔部署預先建構的容器映像檔。如果您有預先建立的映像檔,請使用這個選項。僅支援 Docker Hub 和 Artifact Registry 映像檔。如要使用自訂映像檔,可以將映像檔推送至 Artifact Registry。

ports

通訊埠對應清單,例如 8080:8080,用於決定進入容器。

expose

要公開但不發布的通訊埠清單,例如 3000,確保相依服務有可用的通訊埠。

depends_on

定義容器啟動順序。這可確保任何run-compose列出的服務都有 portsexpose 定義的通訊埠,以便其他容器與其通訊。

cpu_count/cpus

用來設定 Cloud Run CPU 和記憶體限制的提示,系統會根據下列邏輯自動分配資源:

  • <= 2 CPU: 1Gi Memory
  • <= 4 CPU: 2Gi Memory
  • > 4 CPU: 4Gi Memory
container_name

設定容器的依附元件解析名稱,如未指定,預設為服務名稱。

environment

將環境變數傳遞至 Cloud Run 中的對應容器。

command

透過對應至 Cloud Run 中的 args 屬性,覆寫容器宣告的容器預設指令;例如 Dockerfile 的 CMD 指令。

entrypoint

支援。

env_file

支援。

x-google-cloudrun:ingress-container

(擴充功能) 將這項 Google 專屬擴充功能新增至服務,並設為 true,標示為接收所有外部流量的進入容器。

x-google-cloudrun:volume-type: in-memory

(擴充功能) 將這個 Google 專屬擴充功能新增至磁碟區,並設為 in-memory,而非 Cloud Storage 支援的預設磁碟區。

對應至 Secret Manager 的密鑰

如果 compose.yaml 檔案定義 secrets,gcloud CLI 會佈建 Secret Manager 密鑰來儲存這項資料。

對應至 Cloud Storage 的磁碟區和設定

如果 compose.yaml 檔案定義了頂層 volumesconfigs,gcloud CLI 會佈建 Cloud Storage 值區來管理這項資料。每個部署作業都會建立一個值區,並使用資料夾分隔磁碟區和設定。

  • 具名磁碟區:系統會在值區中建立與磁碟區名稱對應的空白資料夾。
  • 繫結掛接:如果是繫結掛接,Cloud Run 會先將本機來源目錄的內容上傳至 bucket 中的資料夾,再進行部署。
  • 設定:對於以 file: 來源定義的每個設定,Cloud Run 會將本機檔案的內容上傳至儲存空間的資料夾。

必要的角色

部署期間,Cloud Run 會自動授予已部署服務的服務身分,存取已佈建資源所需的角色:

  • Cloud Storage Bucketroles/storage.objectUser
  • Secret Manager 密鑰roles/secretmanager.secretAccessor

同一執行個體的容器之間通訊

Cloud Run 會在每個容器的 /etc/hosts 檔案中新增項目。這個項目會將 compose.yaml 檔案中的服務名稱對應至內部 IP 位址,讓服務能使用服務名稱彼此通訊。

後續步驟