本頁說明如何使用以 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"
範例:含有 Nginx、Flask 和 MongoDB 的多容器應用程式
以下範例顯示應用程式的 compose.yaml 檔案,該應用程式具有 Nginx Proxy、Flask 後端和 MongoDB 資料庫。
部署這個範例需要下列專案結構:
compose.yaml:定義服務的 Compose 檔案。nginx/nginx.conf: Nginx Proxy 的設定。flask/:包含 Flask 應用程式程式碼 (server.py、Dockerfile和requirements.txt) 的目錄。
services:
web:
image: nginx
volumes:
- ./nginx/nginx.conf:/tmp/nginx.conf
environment:
- FLASK_SERVER_ADDR=backend:9091
command: /bin/bash -c "envsubst < /tmp/nginx.conf > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
- 80:80
x-google-cloudrun:
ingress-container: true
depends_on:
- backend
backend:
build:
context: flask
target: builder
stop_signal: SIGINT
environment:
- FLASK_SERVER_PORT=9091
volumes:
- ./flask:/src
depends_on:
- mongo
ports:
- 9091:9091
mongo:
image: mongo
ports:
- 27017:27017
部署服務
如要部署服務,請執行
gcloud run compose up指令:gcloud run compose up compose.yaml回應
y安裝必要元件或啟用 API 的任何提示。選用:公開發布服務,允許未經驗證的存取。
部署完成後,畫面會顯示 Cloud Run 服務網址。複製這個網址並貼到瀏覽器,即可查看正在執行的容器。您可以在 Google Cloud 控制台停用預設驗證。
使用 Compose 從來源部署
在 compose.yaml 檔案中定義服務,然後從原始碼建構並部署服務。詳情請參閱「從原始碼部署服務」。
範例:單一服務應用程式
以下範例顯示從目前目錄中的來源建構的 Web 服務 compose.yaml 檔案。
services:
web:
build: .
ports:
- "8080:8080"
部署服務
在專案目錄中,建立包含服務定義的
compose.yaml檔案。如要部署服務,請執行
gcloud run compose up指令:gcloud run compose up compose.yaml回應任何提示,安裝必要元件或啟用 API。
y選用:公開發布服務,允許未經驗證的存取。
部署完成後,畫面會顯示 Cloud Run 服務網址。複製這個網址並貼到瀏覽器,即可查看正在執行的容器。您可以在 Google Cloud 控制台停用預設驗證。
強制重新建構
根據預設,如果來源程式碼自上次建構後未變更,Cloud Run Compose 部署作業會略過建構程序。如要強制重建以 build 設定定義的任何服務,請使用 --build 旗標,如下所示:
gcloud run compose up compose.yaml --build
如果遠端存放區、映像檔或摘要已遭刪除,但本機原始碼維持不變,這項功能就特別實用。--build 和 --no-build 旗標互斥。
支援功能
使用 compose.yaml 檔案部署時,Cloud Run 會自動佈建 Compose 檔案中定義的其他 Google Cloud 資源。如果需要資源,Cloud Run 會先提示您同意,再建立資源。
Cloud Run 支援下列 Compose 功能子集:
| 撰寫欄位 | Cloud Run 對應和說明 |
|---|---|
services |
服務會對應至已部署 Cloud Run 服務中的個別容器。 |
volumes |
部分支援。將 |
secrets |
支援。使用 Secret Manager。 |
configs |
支援。使用 Cloud Storage。 |
build |
支援。使用建構環境建構容器,並加上標記,然後推送至 Artifact Registry 中的 |
image |
從支援的登錄檔部署預先建構的容器映像檔。如果您有預先建立的映像檔,請使用這個選項。僅支援 Docker Hub 和 Artifact Registry 映像檔。如要使用自訂映像檔,可以將映像檔推送至 Artifact Registry。 |
ports |
通訊埠對應清單,例如 |
expose |
要公開但不發布的通訊埠清單,例如 |
depends_on |
定義容器啟動順序。這可確保任何 |
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 專屬擴充功能新增至磁碟區,並設為 |
對應至 Secret Manager 的密鑰
如果 compose.yaml 檔案定義 secrets,gcloud CLI 會佈建 Secret Manager 密鑰來儲存這項資料。
對應至 Cloud Storage 的磁碟區和設定
如果 compose.yaml 檔案定義了頂層 volumes 或 configs,gcloud CLI 會佈建 Cloud Storage 值區來管理這項資料。每個部署作業都會建立一個 bucket,並使用資料夾分隔磁碟區和設定。
- 具名磁碟區:系統會在 bucket 中建立與磁碟區名稱對應的空白資料夾。
- 繫結掛接:如果是繫結掛接,Cloud Run 會先將本機來源目錄的內容上傳至 bucket 中的資料夾,再進行部署。
- 設定:針對以
file:來源定義的每個設定,Cloud Run 會將本機檔案的內容上傳至 bucket 中的資料夾。
必要的角色
部署期間,Cloud Run 會自動授予已部署服務的服務身分,存取已佈建資源所需的角色:
- Cloud Storage 值區:
roles/storage.objectUser - Secret Manager 密鑰:
roles/secretmanager.secretAccessor
同一執行個體的容器之間通訊
Cloud Run 會在每個容器的 /etc/hosts 檔案中新增項目。這個項目會將 compose.yaml 檔案中的服務名稱對應至內部 IP 位址,讓服務能使用服務名稱彼此通訊。