Создание образа контейнера из JAR-файла или WAR
Примечание.
Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 2025 г. с 3-летнего периода выхода на пенсию. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.
Стандартный план потребления и выделенного плана будет устарел с 30 сентября 2024 г. с полным завершением работы после шести месяцев. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в статье "Миграция потребления Azure Spring Apps Standard" и выделенного плана в приложения контейнеров Azure.
Эта статья относится к:✅ Basic/Standard ✅ Enterprise
В этой статье описано, как упаковать приложение Java из JAR-файла или WAR в образ контейнера.
План Azure Spring Apps уровня "Стандартный" позволяет отправлять JAR-файл или WAR-файл, который он автоматически упаковывается в образ управляемого контейнера. Аналогичным образом приложения контейнеров Azure и Служба Azure Kubernetes (AKS) также поддерживают развертывание приложения контейнера непосредственно из JAR-файла или WAR.
Необходимые компоненты
- Docker.
- Существующий реестр контейнеров для хранилища образов контейнеров. Для Реестр контейнеров Azure его можно настроить с помощью портал Azure или с помощью Azure CLI.
Сборка образа контейнера
Если вы хотите создать образ контейнера, который соответствует одному, используемому в Azure Spring Apps, можно создать образ самостоятельно. Чтобы создать JAR-файл, WAR-файл или исходный код Java в образ контейнера, выполните следующие общие действия.
- Создайте исходный код Java в JAR-файл или WAR-файл.
- Создайте Dockerfile и выполните следующие действия:
- (Только для ФАЙЛОВ WAR) Скачайте Tomcat и настройте его.
- Скопируйте JAR-файл или WAR-файл в образ контейнера.
- Укажите точку входа образа контейнера.
- Создайте образ контейнера, выполнив
docker build
команду с помощью Файла Dockerfile, созданного на предыдущем шаге. - Отправьте образ контейнера в общедоступный или частный реестр контейнеров, чтобы его можно было развернуть в среде приложений контейнеров Azure или кластере Служба Azure Kubernetes (AKS).
В следующих разделах данные шаги описаны более подробно.
Создание JAR-файла
Мы рекомендуем использовать образы контейнеров для Microsoft Build openJDK , если приложение работает гладко в Azure Spring Apps. Если требования изменяются, вы можете выбрать другие образы контейнеров, которые лучше соответствуют вашим потребностям.
Чтобы определить версию JDK, используемую в развертывании в Azure Spring Apps, используйте следующую команду:
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 следует использовать.
Чтобы определить версию Tomcat, используемую в развертывании в Azure Spring Apps, используйте следующую команду:
az spring app deployment show \
--app <app-name> \
--name <deployment-name> \
--resource-group <resource-group> \
--service <service-name> \
--query properties.source.serverVersion
В следующем примере показан файл Dockerfile на основе 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"]
Чтобы создать образ контейнера с помощью этого файла 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
Если у вас есть экземпляр Реестр контейнеров Azure, можно создавать, отправлять и запускать образ контейнера с помощью Реестр контейнеров Azure задач. Дополнительные сведения см. в кратком руководстве по созданию и запуску образа контейнера с помощью задач Реестр контейнеров Azure.