Поделиться через


Создание образа контейнера из 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 в образ контейнера, выполните следующие общие действия.

  1. Создайте исходный код Java в JAR-файл или WAR-файл.
  2. Создайте Dockerfile и выполните следующие действия:
    1. (Только для ФАЙЛОВ WAR) Скачайте Tomcat и настройте его.
    2. Скопируйте JAR-файл или WAR-файл в образ контейнера.
    3. Укажите точку входа образа контейнера.
  3. Создайте образ контейнера, выполнив docker build команду с помощью Файла Dockerfile, созданного на предыдущем шаге.
  4. Отправьте образ контейнера в общедоступный или частный реестр контейнеров, чтобы его можно было развернуть в среде приложений контейнеров 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.