使用 Azure Developer CLI 的 App Service 容器部署

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 provisionazd up 已建立的基礎架構。

部署準備驗證

在更新網站前, azd deploy 先驗證目標網站是否具備容器支援。 例如,如果網站不是 Linux 容器應用程式,而是使用 Windows 方案、缺少DOCKER|linuxFxVersion值或缺乏 ACR 的管理身份存取權,然後azd deploy停止並回傳錯誤,指出缺少的設定。 在再次部署前,先修正基礎架構並重新配置。

App Service 容器與容器應用程式的比較

containerappappservice 主機都會部署容器映像檔,但它們管理基礎架構和組態的方式不同:

行為 appservice 主機 containerapp 主機
基礎設施配置 azd deploy 只更新圖片參考,並期望網站已經具備容器支援。 為你佈建並設定更多容器執行階段的相關項目。
環境變數 不會套用服務等級 env: 設定。 改用你的基礎架構來設定應用程式設定。 對容器套用服務等級 env: 設定。
多語言支援 透過 language: docker容器化任何語言的應用程式,對於沒有內建 azd 支援的執行時非常有用。 透過 language: docker容器化任何語言的應用程式,對於沒有內建 azd 支援的執行時非常有用。