使用自訂容器映像部署應用程式
警告
本文會參考 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 :
將下列內容新增至 Dockerfile,將代理程式檔案下載並安裝至映像:
ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
新增 APM 所需的環境變數:
ENV NEW_RELIC_APP_NAME=appName ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
藉由新增下列專案來修改映像進入點:
java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar
若要安裝其他語言的代理程式,請參閱其他代理程式的官方檔:
New Relic:
- Python: 安裝 Python 代理程式
- Node.js: 安裝Node.js代理程式
Dynatrace:
- Python: 使用 OpenTelemetry 檢測 Python 應用程式
- Node.js: 使用 OpenTelemetry 檢測Node.js應用程式
AppDynamics:
- Python: 安裝 Python 代理程式
- Node.js: 安裝Node.js代理程式
檢視容器記錄
若要檢視容器應用程式的主控台記錄,可以使用下列 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"
掃描您的映像是否有弱點
建議您搭配使用 適用於雲端的 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