Azure Developer CLI (azd) 可以在多個 Azure 主機服務中建置、發布及部署容器映像。 容器工作流程結合了主機目標、建置地點及發佈方式。 最佳組合取決於你的應用程式、團隊可用的工具,以及你如何在不同環境間推廣圖片。
利用這篇文章將這些選擇與你的需求相匹配。 它比較了以下決策:
- 哪個 Azure 服務會架設你的容器?
- 無論是
azd在本地建置映像檔、遠端在 Azure Container Registry(ACR)建置,或是使用現有映像檔。 - 無論
azd是將映像檔一併發佈及部署,還是分成個別步驟進行。
本文比較了這些通用主機服務:
首先比較主機目標和映像建置選項。 了解這些選項後,請在 「比較容器部署工作流程 」區塊中找出候選工作流程。
比較容器託管目標
azure.yaml 中的 host 屬性會指出 azd 會將您的容器部署到的 Azure 服務。 選擇主機時,不受映像建置位置限制。
| 宿主價值 | Azure 裝載目標 | 容器工作流程 | 考慮事項 |
|---|---|---|---|
containerapp |
Azure 容器應用程式 與 Container Apps 作業 | 可以從專案和 Dockerfile 建置,或部署預先建構好的映像檔。 | 支援服務層級環境變數及容器應用程式專屬部署策略。 Container Apps 作業也請使用相同的主機值。 |
appservice |
Azure App 服務 上適用於容器的 Linux Web 應用程式 | 可以從專案和 Dockerfile 建置,或部署預先建構好的映像檔。 | 你的基礎架構必須配置一個支援 Linux 容器的站點,並設定對 ACR 的受管理身份存取。
azd deploy 只更新映像檔參照。 |
aks |
Azure Kubernetes Service | 建立映像檔並部署 Kubernetes 清單、Helm 圖表,或 Kustomize 設定。 | 它提供最多的控制權,但需要你管理叢集和 Kubernetes 配置。 搭配 azd 使用 Helm 或 Kustomize 需要啟用 Alpha 功能旗標。 |
ai.endpoint 和 azure.ai.agent 主機也支援用於特殊 Microsoft Foundry 案例的 Docker 設定。 關於這些工作負載,請參見部署至 Microsoft Foundry 線上端點及 Microsoft Foundry 代理擴充套件。
比較映像建置選項
服務定義決定是 azd 建立映像檔還是從現有映像開始。
| 建置選項 | 必要的設定 | 建置執行的位置 | 本地貨櫃引擎 | 最適合 |
|---|---|---|---|---|
| 本地建設 |
project 以及(可選)docker |
你的開發環境或 CI 跑者 | Required | 快速的開發迭代流程,以及已提供 Docker 或 Podman 的建置環境。 |
| ACR 遠端建置 |
project 與 docker.remoteBuild: true |
Azure Container Registry | 除非遠端建置失敗後需要備援,否則 azd 不是必須的 |
雲端建置與環境一致,無需本地容器引擎。 文件中記載的遠端建置工作流程是以 Azure 容器應用程式 為目標。 |
由 azd 管理的現有映像 |
image |
無原始建置 | 可能是影像生命週期操作所必需的 | 這些映像檔已經存在於本地或登錄檔中,能夠 azd 拉取、標記和推送。 |
| 遠端映像直通傳遞 |
image 與 docker.imagePassthrough: true |
沒有組裝 | 非必要 | 主機資源應原樣使用的完整限定遠端映像。 |
閱讀每個選項配置的文章時,請記得以下概念上的差異:
-
預先建置映像使用
image屬性,而不是project,而且azd仍可對其進行拉取、標記及推送。 - 當遠端建置失敗且有支援的容器引擎可用時, ACR 遠端建置 會退回到本地的 Docker 或 Podman 建置。
-
映像檔直通需要完整限定的遠端映像檔參照,且其中必須包含登錄來源,不能與
remoteBuild搭配使用,並且不支援azd publish --from-package或azd publish --to選項,因為azd不管理該映像檔。
關於每個選項的完整配置,請參閱 Azure Container Registry 的遠端建置支援、使用第三方容器登錄、使用 Azure Developer CLI 的 App Service 容器部署,以及 docker schema。
比較容器部署工作流程
在比較容器 主機目標 與比較 映像建置選項中的建置選項後,請使用下表找出最可能符合你需求的工作流程。
| 如果你需要的話 | 從...開始 | 原因為何 |
|---|---|---|
| 將容器化應用程式部署到無伺服器平台 | 搭配本機建置的 Azure 容器應用程式 | 此工作流程將基於 Dockerfile 的專案建置並部署於一個開發工作流程中。 |
| 在本地不安裝 Docker 或 Podman 即可自行建置 | 使用 ACR 遠端建置的 Azure 容器應用程式 | ACR 會從你的專案和 Azure 中的 Dockerfile 建立映像檔。 |
| 部署另一個建置系統產生的映像檔 | Azure 容器應用程式 或 App Service 搭配預建映像 |
image 屬性用來識別現有的映像檔,而不是用來建置的原始程式碼。 |
| 重用遠端影像,無需拉取、標記或推送 | 支援映像傳遞的 Azure 容器應用程式 |
azd 將完全限定的影像參考直接傳遞給主機資源。 |
| 將傳統網頁應用程式架設為 Linux 容器 | Azure App 服務 上適用於容器的 Web 應用程式 | App Service 提供整合的網頁主機平台,而您的基礎架構則控制容器準備的網站配置。 |
| 管理 Kubernetes 資訊清單與叢集組態 | Azure Kubernetes Service (AKS) |
azd 可以建立並發佈映像檔,然後部署 Kubernetes 清單、Helm 圖表,或 Kustomize 設定。 |
| 建造一次,透過環境推廣同一形象 |
azd publish,接著是 azd deploy --from-package |
發佈與部署是分開的,因此每個環境接收相同的映像檔。 |
每一列將 比較容器寄存目標 的託管選項與 比較映像建置選項 中的建置選項合併為起點。 在 azure.yaml 中設定您選擇的選項,讓 Bicep 或 Terraform 檔案佈建對應的託管和登錄資源。
最小服務定義會設定 host、建置來源及 Dockerfile:
services:
api:
project: ./src/api
language: docker
host: containerapp
docker:
path: ./Dockerfile
若要將此定義調整至另一台主機,請更改 host 值並遵循每台主機的設定合約:
- 使用 Azure Developer CLI 部署至 Azure 容器應用程式
- 使用 Azure Developer CLI 進行 App Service 容器部署
- Helm 與 Kustomize 支援
比較發佈與部署指令
選擇主機與建置選項後,請選擇是合併還是分離映像檔發佈與部署。
| 指令 | 影像動作 | Azure 資源動作 | 何時使用 |
|---|---|---|---|
azd up |
建造與推進 | 配置與部署 | 你想建立或更新完整的環境,並在一個工作流程中部署應用程式。 |
azd deploy |
建造與推進 | 部署 | 基礎架構已經存在,而您想要部署應用程式的變更。 |
azd publish |
建造與推進 | 沒有 | 你想建立登錄檔工件,但不部署它。
azd publish 支援容器應用程式與 AKS 服務。 |
azd publish --from-package <image> |
推送現有的本地映像檔 | 沒有 | 另一個程序建置了映像檔,而你想要 azd 發佈它。 |
azd deploy --from-package <image> |
沒有 | 部署 | 你想要部署特定的映像檔,但不重新建置它。 |
例如,發布一個版本化映像檔,並將該映像部署到另一個環境:
azd publish api --to myregistry.azurecr.io/my-api:v1.0.0
azd env select production
azd deploy api --from-package myregistry.azurecr.io/my-api:v1.0.0
此工作流程可避免在重建每個環境映像時產生差異。 完整推廣工作流程請參閱 Azure 開發者 CLI 發佈工作流程。