次の方法で共有


JAR または WAR からコンテナー イメージをビルドする

Note

BasicStandardEnterprise プランは、2025 年 3 月中旬以降非推奨になり、廃止期間は 3 年間です。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の廃止のお知らせ」を参照してください。

Standard 従量課金と専用プランは、2024 年 9 月 30 日以降に非推奨になり、6 か月後に完全にシャットダウンされます。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の Standard 従量課金および専用プランを Azure Container Apps に移行する」を参照してください。

この記事の適用対象:✅ Basic/Standard ✅ Enterprise

この記事では、Java アプリケーションを JAR または WAR ファイルからコンテナー イメージにパッケージ化する方法について説明します。

Azure Spring Apps の Standard プランを利用すると、JAR または WAR ファイルをアップロードして、自動的にマネージド コンテナー イメージにパッケージ化されるようにすることができます。 同様に、Azure Container Apps と Azure Kubernetes Service (AKS) でも、JAR または WAR ファイルから直接コンテナー アプリをデプロイできます。

前提条件

  • Docker
  • コンテナー イメージのストレージ用の既存のコンテナー レジストリ。 Azure Container Registry の場合、Azure portal または Azure CLI を使用して設定できます。

コンテナー イメージをビルドする

Azure Spring Apps で使用されているものと整合するコンテナー イメージを作成する場合は、イメージを自分でビルドできます。 JAR ファイル、WAR ファイル、または Java ソース コードをコンテナー イメージにビルドするには、次の一般的な手順に従います。

  1. Java ソース コードを JAR ファイルまたは WAR ファイルにビルドします。
  2. Dockerfile を作成し、次のアクションを実行します。
    1. (WAR ファイルの場合のみ) Tomcat をダウンロードして構成します。
    2. JAR ファイルまたは WAR ファイルをコンテナー イメージにコピーします。
    3. コンテナー イメージのエントリ ポイントを指定します。
  3. 前の手順で作成した Dockerfile を使用して docker build コマンドを実行することで、コンテナー イメージを作成します。
  4. 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> \
    .

マルチステージ ビルド

前述の 2 つの方法は、パッケージのみのビルドです。 ローカルのビルド ツールを使用して、ビルド プロセスを管理し、結果を JAR または WAR ファイルにパッケージ化します。

ビルド ツールまたは JDK をホスト コンピューターにインストールしないが、異なるマシン間で一貫した結果が得られるようにする場合は、Dockerfile で複数のビルド ステージを定義することで別の方法を使用することができます。 1 つのステージはコンパイルとパッケージ化専用で、もう 1 つのステージはイメージ ビルド プロセスを処理します。 詳細については、「マルチステージ ビルド」を参照してください。

Azure Container Registry タスク

Azure Container Registry インスタンスがある場合は、Azure Container Registry タスクを使用してコンテナー イメージのビルド、プッシュ、実行を行うことができます。 詳細については、「クイック スタート: Azure Container Registry タスクを使用したコンテナー イメージのビルドと実行」を参照してください。