Compartilhar via


Criar uma imagem de contêiner de um JAR ou WAR

Observação

Os planos Básico, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de desativação de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira o anúncio de desativação dos Aplicativos Spring do Azure.

O plano consumo e dedicado Standard será preterido a partir de 30 de setembro de 2024, com um desligamento completo após seis meses. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira Migrar o plano dedicado e consumo Standard dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.

Este artigo se aplica a:✅ Básico/Standard ✅ Enterprise

Este artigo fornece diretrizes sobre como empacotar seu aplicativo Java de um arquivo JAR ou WAR em uma imagem de contêiner.

O plano Standard dos Aplicativos Spring do Azure permite que você carregue um arquivo JAR ou WAR, que ele empacota automaticamente em uma imagem de contêiner gerenciado. Da mesma forma, os Aplicativos de Contêiner do Azure e o Serviço de Kubernetes do Azure (AKS) também dão suporte à implantação de um aplicativo de contêiner diretamente de um arquivo JAR ou WAR.

Pré-requisitos

  • Docker.
  • Um registro de contêiner existente para armazenamento de imagens de contêiner. Para o Registro de Contêiner do Azure, você pode configurá-lo por meio do Portal do Azure ou da CLI do Azure.

Criar uma imagem de contêiner

Se você quiser criar uma imagem de contêiner que seja consistente com a usada nos Aplicativos Spring do Azure, você pode criar a imagem por conta própria. Para criar um arquivo JAR, um arquivo WAR ou um código-fonte Java em uma imagem de contêiner, use as seguintes etapas gerais:

  1. Crie seu código-fonte Java em um arquivo JAR ou em um arquivo WAR.
  2. Crie um Dockerfile e execute as seguintes ações:
    1. (Somente para arquivos WAR) Baixe o Tomcat e configure-o.
    2. Copie o arquivo JAR ou o arquivo WAR para a imagem do contêiner.
    3. Especifique o ponto de entrada da imagem de contêiner.
  3. Crie uma imagem de contêiner executando o comando docker build com o Dockerfile criado na etapa anterior.
  4. Envie a imagem de contêiner por push para um registro de contêiner público ou privado, para que você possa implantá-la em um ambiente de Aplicativos de Contêiner do Azure ou em um cluster do Serviço de Kubernetes do Azure (AKS) mais tarde.

As seções a seguir descrevem essas etapas mais detalhadamente.

Criar um arquivo JAR

É recomendável usar Imagens de contêiner para o Microsoft Build do OpenJDK se o aplicativo estiver sendo executado sem problemas nos Aplicativos Spring do Azure. Se seus requisitos forem alterados, você poderá escolher outras imagens de contêiner que melhor atenda às suas necessidades.

Para determinar a versão do JDK usada em sua implantação em execução nos Aplicativos Spring do Azure, use o seguinte comando:

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

O exemplo a seguir do Dockerfile baseia-se no 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"]

Para criar sua imagem de contêiner com este Dockerfile, use o seguinte comando:

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

Para obter informações sobre como personalizar opções de JVM, consulte Opções de JVM.

Criar um arquivo WAR

Antes de criar um arquivo WAR, você precisa decidir quais versões do JDK e do Tomcat usar.

Para determinar a versão do Tomcat usada em sua implantação em execução nos Aplicativos Spring do Azure, use o seguinte comando:

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

O exemplo a seguir mostra um Dockerfile baseado no 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"]

Para criar sua imagem de contêiner com este Dockerfile, use o seguinte comando:

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

Builds de várias fases

As duas abordagens mencionadas anteriormente são builds somente de pacote. Eles dependem da ferramenta de build local para gerenciar o processo de build e empacotar o resultado em um arquivo JAR ou WAR.

Se você preferir não instalar uma ferramenta de build ou JDK no computador host, mas quiser resultados consistentes em diferentes computadores, poderá usar um método alternativo definindo vários estágios de build em um Dockerfile. Um estágio é dedicado à compilação e ao empacotamento, e outro estágio manipula o processo de criação de imagem. Para obter mais informações, consulte Builds de vários estágios.

Tarefas do Registro de Contêiner do Azure

Se você tiver uma instância do Registro de Contêiner do Azure, poderá compilar, enviar por push e executar uma imagem de contêiner usando tarefas do Registro de Contêiner do Azure. Para obter mais informações, consulte Início Rápido: Criar e executar uma imagem de contêiner usando as Tarefas do Registro de Contêiner do Azure.