選擇容器建置與部署工作流程

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 資源動作 何時使用
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 發佈工作流程。