Udostępnij za pośrednictwem


Tworzenie obrazu kontenera z pliku JAR lub WAR

Uwaga

Plany Podstawowa, Standardowa i Enterprise zostaną wycofane od połowy marca 2025 r. z 3-letnim okresem emerytalnym. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu usługi Azure Spring Apps.

Zużycie standardowe i dedykowany plan zostaną wycofane od 30 września 2024 r. z całkowitym zamknięciem po sześciu miesiącach. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz Migrowanie użycia usługi Azure Spring Apps w warstwie Standardowa i dedykowanego planu do usługi Azure Container Apps.

Ten artykuł dotyczy:✅ Podstawowa/Standardowa ✅ Enterprise

Ten artykuł zawiera wskazówki dotyczące tworzenia pakietów aplikacji Java z pliku JAR lub WAR do obrazu kontenera.

Plan usługi Azure Spring Apps w warstwie Standardowa umożliwia przekazanie pliku JAR lub WAR, który automatycznie pakuje do zarządzanego obrazu kontenera. Podobnie usługi Azure Container Apps i Azure Kubernetes Service (AKS) obsługują również wdrażanie aplikacji kontenera bezpośrednio z pliku JAR lub WAR.

Wymagania wstępne

  • Platforma Docker
  • Istniejący rejestr kontenerów dla magazynu obrazów kontenerów. W przypadku usługi Azure Container Registry można skonfigurować ją przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.

Tworzenie obrazu kontenera

Jeśli chcesz utworzyć obraz kontenera zgodny z tym, który jest używany w usłudze Azure Spring Apps, możesz utworzyć obraz samodzielnie. Aby utworzyć plik JAR, plik WAR lub kod źródłowy Java w obrazie kontenera, wykonaj następujące ogólne kroki:

  1. Skompiluj kod źródłowy Java w pliku JAR lub pliku WAR.
  2. Utwórz plik Dockerfile i wykonaj następujące czynności:
    1. (Tylko w przypadku plików WAR) Pobierz serwer Tomcat i skonfiguruj go.
    2. Skopiuj plik JAR lub plik WAR do obrazu kontenera.
    3. Określ punkt wejścia obrazu kontenera.
  3. Utwórz obraz kontenera, uruchamiając docker build polecenie za pomocą pliku Dockerfile utworzonego w poprzednim kroku.
  4. Wypchnij obraz kontenera do publicznego lub prywatnego rejestru kontenerów, aby móc wdrożyć go w środowisku usługi Azure Container Apps lub klastrze usługi Azure Kubernetes Service (AKS) później.

W poniższych sekcjach opisano te kroki bardziej szczegółowo.

Tworzenie pliku JAR

Zalecamy używanie obrazów kontenerów dla zestawu Microsoft Build openJDK , jeśli aplikacja działa płynnie w usłudze Azure Spring Apps. Jeśli wymagania się zmienią, możesz wybrać inne obrazy kontenerów, które lepiej odpowiadają Twoim potrzebom.

Aby określić wersję zestawu JDK używaną we wdrożeniu uruchomionym w usłudze Azure Spring Apps, użyj następującego polecenia:

az spring app deployment show \
    --app <app-name> \
    --name <deployment-name> \
    --resource-group <resource-group> \
    --service <service-name> \
    --query properties.source.runtimeVersion

Poniższy przykładowy plik Dockerfile jest oparty na zestawie 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"]

Aby skompilować obraz kontenera za pomocą tego pliku Dockerfile, użyj następującego polecenia:

docker build -t <image-name>:<image-tag> \
    -f JAR.dockerfile \
    --build-arg JAR_FILENAME=<path-to-jar> \
    .

Aby uzyskać informacje na temat dostosowywania opcji JVM, zobacz Opcje JVM.

Tworzenie pliku WAR

Przed utworzeniem pliku WAR należy zdecydować, które wersje zestawu JDK i Tomcat mają być używane.

Aby określić wersję serwera Tomcat używaną we wdrożeniu uruchomionym w usłudze Azure Spring Apps, użyj następującego polecenia:

az spring app deployment show \
    --app <app-name> \
    --name <deployment-name> \
    --resource-group <resource-group> \
    --service <service-name> \
    --query properties.source.serverVersion

W poniższym przykładzie pokazano plik Dockerfile oparty na zestawie JDK 17:

# 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"]

Aby skompilować obraz kontenera za pomocą tego pliku Dockerfile, użyj następującego polecenia:

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> \
    .

Kompilacje wieloetapowe

Dwa wymienione wcześniej podejścia to kompilacje tylko do pakietu. Polegają one na lokalnym narzędziu kompilacji, aby zarządzać procesem kompilacji i pakować wynik do pliku JAR lub WAR.

Jeśli nie chcesz instalować narzędzia kompilacji lub zestawu JDK na maszynie hosta, ale chcesz uzyskać spójne wyniki na różnych maszynach, możesz użyć alternatywnej metody, definiując wiele etapów kompilacji w pliku Dockerfile. Jeden etap jest przeznaczony do kompilacji i pakowania, a drugi etap obsługuje proces tworzenia obrazu. Aby uzyskać więcej informacji, zobacz Kompilacje wieloetapowe.

Usługa Azure Container Registry Tasks

Jeśli masz wystąpienie usługi Azure Container Registry, możesz kompilować, wypychać i uruchamiać obraz kontenera przy użyciu usługi Azure Container Registry Tasks. Aby uzyskać więcej informacji, zobacz Szybki start: kompilowanie i uruchamianie obrazu kontenera przy użyciu zadań usługi Azure Container Registry.