Azure Developer CLI (azd) 可以部署你嘅應用程式到 Azure App 服務. 此部署模式會將您的應用程式運行為 Linux 容器網頁應用程式。 當服務搭配以 Docker 為基礎的建置使用 host: appservice 時,azd deploy 會建置映像檔、將其推送至 Azure Container Registry(ACR),並讓現有的 App Service 網站使用新的映像檔。
因為 azd deploy 只會更新映像參照,所以在部署之前,你的基礎架構必須先讓網站達到容器化就緒狀態。 了解此部署模式的預期,有助於你正確設定站點,避免部署失敗。
本文說明該部署模式的運作方式、你的基礎設施必須先設定什麼,以及它與 containerapp 主機的差異。 它假設你熟悉 azd 專案, azure.yaml以及 azd 配置和部署指令。
azd 如何將容器部署至 App Service
當服務以容器設定設定 host: appservice 時, azd deploy 會將目標網站視為 容器的網頁應用程式 ,並執行以下工作:
- 它會從你的 Dockerfile 建立容器映像。
- 它會將映像推送到你的基礎設施定義的 ACR 實例。
- 將網站的
DOCKER|<image>設定更新為linuxFxVersion,讓網站執行你的映像檔。
azd deploy
只更新現有網站的圖片參考。 它不會建立或配置底層基礎設施,因此該站點必須在部署前就已具備容器準備狀態。
azure.yaml 中的服務設定
將容器部署至 App Service 會使用 host: appservice 與以 Docker 為基礎的建置。 設定 language: docker,或新增一個指向你的 Dockerfile 的 docker 設定:
services:
web:
project: ./src/web
host: appservice
language: docker
docker:
path: ./Dockerfile
透過這項設定,azd 會根據 ./src/web/Dockerfile 建置映像,將其推送至你的登錄庫,並更新 App Service 網站以執行該映像。
appservice主機不會套用服務等級env:設定,所以請透過你的基礎設施來設定應用程式。
支援容器的 App Service 網站基礎架構需求
azd deploy它不會為主機配置或修改基礎設施appservice,所以你現有的 Bicep 或 Terraform 必須先將網站設定為 Linux 容器應用程式,才能部署。 基礎設施必須符合以下合約:
| 需求 | 詳細資料 |
|---|---|
| Linux App Service 方案 | 該方案運行 Linux(kind: linux 搭配 reserved: true)。 App Service 僅支援 Linux 上的容器,不支援 Windows。 |
| 容器準備站點 | 網站的 linuxFxVersion 使用 DOCKER\| 值。 使用預留位置映像檔也沒問題,因為 azd deploy 會以其建置並推送的映像檔取代它。 |
| 單一容器 | 該網站執行一個容器。 主機 appservice 不支援多容器或 Docker Compose 配置。 |
| 受控識別的 ACR 存取 | 該網站會透過使用者指派的受控識別向 ACR 進行驗證,例如使用 acrUseManagedIdentityCreds: true 搭配 acrUserManagedIdentityID。 主機 appservice 不支援管理員憑證。 |
AZD 部署與 Provision 及 Up 的比較
容器部署至 App Service 涵蓋兩個議題:基礎架構與應用程式碼,這兩者對應到不同的 azd 指令:
| 指令 | 其功能是什麼 | 何時使用它 |
|---|---|---|
azd provision |
從你的 Bicep 或 Terraform 建立並配置 Azure 資源,包括容器支援的 App Service 網站和 ACR。 | 當你的基礎架構發生變更,或網站尚未建立時,請使用它。 |
azd deploy |
建置映像檔、將其推送至 ACR,並更新網站的映像參照。 它不涉及基礎設施。 | 用它來將應用程式變更傳送到已配置好的網站。 |
azd up |
在單一指令中先執行 azd provision,然後再執行 azd deploy。 |
可在首次部署時使用,或在您想要一併佈建及部署時使用。 |
由於 azd deploy 只更新映像參考,容器 appservice 部署總是依賴先前 azd provision 或 azd up 已建立的基礎架構。
部署準備驗證
在更新網站前, azd deploy 先驗證目標網站是否具備容器支援。 例如,如果網站不是 Linux 容器應用程式,而是使用 Windows 方案、缺少DOCKER|linuxFxVersion值或缺乏 ACR 的管理身份存取權,然後azd deploy停止並回傳錯誤,指出缺少的設定。 在再次部署前,先修正基礎架構並重新配置。
App Service 容器與容器應用程式的比較
containerapp 和 appservice 主機都會部署容器映像檔,但它們管理基礎架構和組態的方式不同:
| 行為 |
appservice 主機 |
containerapp 主機 |
|---|---|---|
| 基礎設施配置 |
azd deploy 只更新圖片參考,並期望網站已經具備容器支援。 |
為你佈建並設定更多容器執行階段的相關項目。 |
| 環境變數 | 不會套用服務等級 env: 設定。 改用你的基礎架構來設定應用程式設定。 |
對容器套用服務等級 env: 設定。 |
| 多語言支援 | 透過 language: docker容器化任何語言的應用程式,對於沒有內建 azd 支援的執行時非常有用。 |
透過 language: docker容器化任何語言的應用程式,對於沒有內建 azd 支援的執行時非常有用。 |