分享方式:


使用自訂容器映像部署應用程式

警告

本文會參考 CentOS,這是生命週期結束 (EOL) 狀態的 Linux 發行版本。 請據以考慮您的使用和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指導

注意

基本標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告

標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps

本文適用於: ✔️ 標準 ✔️ 企業

本文說明如何使用自定義容器映像,在 Azure Spring Apps 中部署 Spring Boot 應用程式。 使用自定義容器部署應用程式時,支援大部分的功能,就像部署 JAR 應用程式一樣。 您也可以使用容器映像來部署其他 Java 和非 Java 應用程式。

必要條件

  • 包含應用程式的容器映像。
  • 映射會推送至映像登錄。 如需詳細資訊,請參閱 Azure Container Registry

注意

Web 應用程式必須接聽標準方案的埠 1025 ,以及企業方案的埠 8080 。 變更埠的方式取決於應用程式的架構。 例如,針對 Spring Boot 應用程式或 ASPNETCORE_URLS=http://+:1025/ ASP.NET Core 應用程式指定 SERVER_PORT=1025 。 您可以停用未接聽任何埠之應用程式的探查。 如需詳細資訊,請參閱 如何為 Azure Spring Apps 中裝載的應用程式設定健康情況探查和正常終止期間。

部署應用程式

若要將應用程式部署至自訂容器映像,請使用下列步驟:

若要部署容器映像,請使用下列其中一個命令:

  • 若要將容器映射部署到公用 Docker Hub 至應用程式,請使用下列命令:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
    
  • 若要將容器映像從 ACR 部署到應用程式,或從另一個私人登錄部署到應用程式,請使用下列命令:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
       --container-registry <your-container-registry> \
       --registry-password <your-password> |
       --registry-username <your-username>
    

若要覆寫影像的進入點,請將下列兩個自變數新增至上述任何命令:

    --container-command "java" \
    --container-args "-jar /app.jar -Dkey=value"

若要針對不是 Web 應用程式的映像停用接聽埠,請將下列自變數新增至上述命令:

    --disable-probe true

功能支援矩陣

下列矩陣顯示每個應用程式類型所支援的功能。

功能 Spring Boot Apps - 容器部署 Polyglot Apps - 容器部署 備註
應用程式生命週期管理 ✔️ ✔️
支援容器登錄 ✔️ ✔️
指派端點 ✔️ ✔️
Azure 監視器 ✔️ ✔️
APM 整合 ✔️ ✔️ 手動 安裝支援。
藍/綠部署 ✔️ ✔️
自訂網域 ✔️ ✔️
調整 - 自動調整 ✔️ ✔️
調整 - 手動調整 (縮減/擴增、擴大/縮小) ✔️ ✔️
受控識別 ✔️ ✔️
Spring Cloud Eureka & Config Server ✔️
適用於 VMware Tanzu 的 API 入口網站 ✔️ ✔️ 僅限企業方案。
適用於 VMware Tanzu 的 Spring Cloud 閘道 ✔️ ✔️ 僅限企業方案。
適用於 VMware Tanzu 的應用程式設定服務 ✔️ 僅限企業方案。
VMware Tanzu 的應用程式實時檢視 ✔️ 僅限企業方案。
VMware Tanzu 服務登錄 ✔️ 僅限企業方案。
VNET ✔️ ✔️ 在 NSG 或 Azure 防火牆 中新增登錄以允許清單。
傳出 IP 位址 ✔️ ✔️
E2E TLS ✔️ ✔️ 信任自我簽署的 CA
即時性和整備設定 ✔️ ✔️
進階疑難排解 - 執行緒/堆積/JFR 傾印 ✔️ 映像必須包含Bash和具有指定之 PATH JDK。
使用自己的儲存體 ✔️ ✔️
整合服務繫結與資源連接器 ✔️
可用性區域 ✔️ ✔️
應用程式生命週期事件 ✔️ ✔️
減少應用程式大小 - 0.5 vCPU 和 512 MB ✔️ ✔️
使用 Terraform 將應用程式部署自動化 ✔️ ✔️
虛刪除 ✔️ ✔️
互動式診斷體驗 (AppLens 型) ✔️ ✔️
SLA ✔️ ✔️

注意

Polyglot 應用程式包括非 Spring Boot Java、NodeJS、AngularJS、Python 和 .NET 應用程式。

使用自定義容器進行部署時要注意的常見點

下列幾點將協助您解決使用自定義映像進行部署時的常見情況。

信任證書頒發機構單位

有兩個選項可信任證書頒發機構單位:

選項 1:透過 Azure Spring Apps 上傳

若要將 CA 憑證載入您的應用程式,請參閱 在 Azure Spring Apps 中使用應用程式中的 TLS/SSL 憑證。 接著,憑證會掛接至位置 /etc/azure-spring-cloud/certs/public/

選項 2:在映射中手動安裝

若要信任映像中的 CA,請根據您的環境設定下列變數:

  • 您必須將下列幾行新增至 Dockerfile,將 Java 應用程式匯入信任存放區:

    ADD EnterpriseRootCA.crt /opt/
    RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
    
  • 針對Node.js應用程式,設定 NODE_EXTRA_CA_CERTS 環境變數:

    ADD EnterpriseRootCA.crt /opt/
    ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
    
  • 針對依賴系統 CA 存放區、Debian 或 Ubuntu 映射的 Python 或其他語言,新增下列環境變數:

    ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/
    RUN /usr/sbin/update-ca-certificates
    
  • 針對 Python 或其他依賴系統 CA 存放區、CentOS 或 Fedora 型映像的語言,新增下列環境變數:

    ADD EnterpriseRootCA.crt /etc/pki/ca-trust/source/anchors/
    RUN /usr/bin/update-ca-trust
    

避免影像變更時發生非預期的行為

當您的應用程式重新啟動或相應放大時,一律會提取最新的映像。 如果映射已變更,新啟動的應用程式實例將會使用新的映像,而舊的實例會繼續使用舊的映像。

注意

請避免使用 latest 標籤或覆寫影像,而不需變更標籤,以避免非預期的應用程式行為。

避免無法連線到 VNet 中的容器登錄

如果您將實例部署至 VNet,請務必允許網路流量流向 NSG 中的容器登錄或 Azure 防火牆(如果使用的話)。 如需詳細資訊,請參閱 在 VNet 中執行的客戶責任,以新增所需的安全性規則。

手動將 APM 安裝至映像

安裝步驟會因不同的應用程式效能監視器 (APM) 和語言而有所不同。 下列步驟適用於搭配Java應用程式的New Relic。 您必須使用下列步驟來修改 Dockerfile

  1. 將下列內容新增至 Dockerfile,將代理程式檔案下載並安裝至映像:

    ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
    
  2. 新增 APM 所需的環境變數:

    ENV NEW_RELIC_APP_NAME=appName
    ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
    
  3. 藉由新增下列專案來修改映像進入點: java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar

若要安裝其他語言的代理程式,請參閱其他代理程式的官方檔:

New Relic:

Dynatrace:

AppDynamics:

檢視容器記錄

若要檢視容器應用程式的主控台記錄,可以使用下列 CLI 命令:

az spring app logs \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --service <your-service-name> \
    --instance <your-instance-name>

若要從 Azure 監視器檢視容器事件記錄,請輸入查詢:

AppPlatformContainerEventLogs
| where App == "hw-20220317-1b"

顯示容器事件記錄的 Azure 監視器螢幕快照。

掃描您的映像是否有弱點

建議您搭配使用 適用於雲端的 Microsoft Defender 搭配 ACR,以防止您的影像易受攻擊。 如需詳細資訊,請參閱 適用於雲端的 Microsoft Defender

在 JAR 部署和容器部署之間切換

您可以使用下列命令,將部署類型從 JAR 部署切換為容器部署:

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

或反向:

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --artifact-path <your-jar-file> \
    --service <your-service-name>

使用現有的 JAR 部署建立另一個部署

您可以使用下列命令,使用現有的 JAR 部署來建立另一個部署:

az spring app deployment create \
    --resource-group <your-resource-group> \
    --name <your-deployment-name> \
    --app <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

持續整合與持續傳遞

現在支援使用 Azure Pipelines 工作或 GitHub Actions 將部署自動化。 如需詳細資訊,請參閱將應用程式部署自動化至 Azure Spring Apps 和使用 Azure Spring Apps CI/CD 搭配 GitHub Actions

下一步