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:
- Skompiluj kod źródłowy Java w pliku JAR lub pliku WAR.
- Utwórz plik Dockerfile i wykonaj następujące czynności:
- (Tylko w przypadku plików WAR) Pobierz serwer Tomcat i skonfiguruj go.
- Skopiuj plik JAR lub plik WAR do obrazu kontenera.
- Określ punkt wejścia obrazu kontenera.
- Utwórz obraz kontenera, uruchamiając
docker build
polecenie za pomocą pliku Dockerfile utworzonego w poprzednim kroku. - 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.