從 JAR 或 WAR 建置容器映像
注意
基本、標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告。
標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps。
本文適用於:✅ 基本/標準 ✅ 企業
本文提供如何將 Java 應用程式從 JAR 或 WAR 檔案封裝到容器映射的指引。
Azure Spring Apps Standard 方案可讓您上傳 JAR 或 WAR 檔案,其會自動封裝到受控容器映像中。 同樣地,Azure Container Apps 和 Azure Kubernetes Service (AKS) 也支援直接從 JAR 或 WAR 檔案部署容器應用程式。
必要條件
- Docker。
- 容器映像記憶體的現有容器登錄。 針對 Azure Container Registry,您可以使用 Azure 入口網站 或透過 Azure CLI 進行設定。
建置容器映像
如果您想要建立與 Azure Spring Apps 中使用的容器映射一致,您可以自行建置映射。 若要將 JAR 檔案、WAR 檔案或 Java 原始程式碼建置成容器映射,請使用下列一般步驟:
- 將您的 Java 原始程式碼建置至 JAR 檔案或 WAR 檔案。
- 建立 Dockerfile 並執行下列動作:
- (僅適用於 WAR 檔案)下載 Tomcat 並加以設定。
- 將 JAR 檔案或 WAR 檔案複製到容器映像中。
- 指定容器映像的進入點。
- 使用在上一個步驟中建立的 Dockerfile 執行
docker build
命令來建立容器映像。 - 將容器映射推送至公用或私人容器登錄,以便稍後將其部署在 Azure Container Apps 環境或 Azure Kubernetes Service (AKS) 叢集中。
下列各節會更詳細地說明這些步驟。
建置 JAR 檔案
如果您的應用程式在 Azure Spring Apps 上順利執行,建議您針對 Microsoft Build of OpenJDK 使用容器映像。 如果您的需求變更,您可以選擇其他更符合需求的容器映像。
若要判斷在 Azure Spring Apps 中執行的部署中使用的 JDK 版本,請使用下列命令:
az spring app deployment show \
--app <app-name> \
--name <deployment-name> \
--resource-group <resource-group> \
--service <service-name> \
--query properties.source.runtimeVersion
下列範例 Dockerfile 是以 JDK 17 為基礎:
# filename: JAR.dockerfile
FROM mcr.microsoft.com/openjdk/jdk:17-mariner
ARG JAR_FILENAME
COPY $JAR_FILENAME /opt/app/app.jar
ENTRYPOINT ["java", "-jar", "/opt/app/app.jar"]
若要使用此 Dockerfile 建置容器映像,請使用下列命令:
docker build -t <image-name>:<image-tag> \
-f JAR.dockerfile \
--build-arg JAR_FILENAME=<path-to-jar> \
.
如需自定義 JVM 選項的相關信息,請參閱 JVM 選項。
建置 WAR 檔案
在建置 WAR 檔案之前,您必須決定要使用的 JDK 和 Tomcat 版本。
若要判斷您在 Azure Spring Apps 中執行之部署中使用的 Tomcat 版本,請使用下列命令:
az spring app deployment show \
--app <app-name> \
--name <deployment-name> \
--resource-group <resource-group> \
--service <service-name> \
--query properties.source.serverVersion
下列範例顯示以 JDK 17 為基礎的 Dockerfile:
# filename: WAR.dockerfile
FROM mcr.microsoft.com/openjdk/jdk:17-mariner
ARG TOMCAT_VERSION
ARG TOMCAT_MAJOR_VERSION
ARG WAR_FILENAME
ARG TOMCAT_HOME=/opt/tomcat
# Set up Tomcat
ADD https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR_VERSION/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
$TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz
RUN tdnf update -y \
&& tdnf install -y tar \
&& tar -zxf $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz -C $TOMCAT_HOME --strip-components 1 \
&& rm $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz \
&& rm -r $TOMCAT_HOME/webapps/*
COPY $WAR_FILENAME $TOMCAT_HOME/webapps/app.war
ENTRYPOINT ["/bin/sh", "-c" , "/opt/tomcat/bin/catalina.sh run"]
若要使用此 Dockerfile 建置容器映像,請使用下列命令:
docker build -t <image-name>:<image-tag> \
-f WAR.dockerfile \
--build-arg WAR_FILENAME=<path-to-war> \
--build-arg TOMCAT_VERSION=<version> \
--build-arg TOMCAT_MAJOR_VERSION=<major-version> \
.
多階段建置
先前提到的兩種方法是僅限套件的組建。 他們依賴您的本機建置工具來管理建置程式,並將結果封裝到 JAR 或 WAR 檔案中。
如果您不想在主計算機上安裝建置工具或 JDK,但想要在不同機器上取得一致的結果,您可以在 Dockerfile 中定義多個建置階段,以使用替代方法。 一個階段專門用於編譯和封裝,另一個階段會處理映射建置程式。 如需詳細資訊,請參閱 多階段組建。
Azure Container Registry 工作
如果您有 Azure Container Registry 實例,您可以使用 Azure Container Registry 工作來建置、推送和執行容器映像。 如需詳細資訊,請參閱 快速入門:使用 Azure Container Registry 工作建置和執行容器映像。