Implantar um aplicativo com uma imagem de contêiner personalizada

Cuidado

Este artigo faz referência ao CentOS, uma distribuição Linux que está em status de fim do serviço (EOL). Considere seu uso e planeje adequadamente. Para obter mais informações, veja as Diretrizes sobre fim da vida útil do CentOS.

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 Standard de consumo e dedicado 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 Standard de consumo e dedicado dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.

Este artigo se aplica aos níveis: ✔️ Standard ✔️ Enterprise

Este artigo explica como implantar aplicativos Spring Boot no Azure Spring Apps usando uma imagem de contêiner personalizada. A implantação de um aplicativo com um contêiner personalizado dá suporte à maioria dos mesmos recursos da implantação de um aplicativo JAR. Outros aplicativos Java e não Java também podem ser implantados com a imagem de contêiner.

Pré-requisitos

  • Uma imagem de contêiner que contém o aplicativo.
  • A imagem é enviada por push para um registro de imagem. Para obter mais informações, confira Registro de Contêiner do Azure.

Observação

O aplicativo Web deve escutar na porta 1025 para o plano Standard e na porta 8080 para o plano Enterprise. A maneira de alterar a porta depende da estrutura do aplicativo. Por exemplo, especifique SERVER_PORT=1025 para aplicativos Spring Boot ou ASPNETCORE_URLS=http://+:1025/ para aplicativos ASP.NET Core. É possível desabilitar a investigação em aplicativos que não escutam portas. Para obter mais informações, consulte Como configurar investigações de integridade e períodos de término normais para aplicativos hospedados em Aplicativos Spring do Azure.

Implantar seu aplicativo

Para implantar um aplicativo em uma imagem de contêiner personalizada, use as seguintes etapas:

Para implantar uma imagem de contêiner, use um dos seguintes comandos:

  • Para implantar uma imagem de contêiner do Docker Hub público em um aplicativo, use o seguinte comando:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
    
  • Para implantar uma imagem de contêiner do ACR em um aplicativo, ou de outro registro privado em um aplicativo, use o seguinte comando:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
       --container-registry <your-container-registry> \
       --registry-password <your-password> |
       --registry-username <your-username>
    

Para substituir o ponto de entrada da imagem, adicione os seguintes dois argumentos a qualquer um dos comandos acima:

    --container-command "java" \
    --container-args "-jar /app.jar -Dkey=value"

Para desabilitar a escuta em uma porta de imagens que não são aplicativos Web, adicione o seguinte argumento aos comandos acima:

    --disable-probe true

Matriz de suporte a recursos

A matriz a seguir mostra quais recursos têm suporte em cada tipo de aplicativo.

Recurso Aplicativos Spring Boot – implantação de contêiner Aplicativos Polyglot – implantação de contêiner Observações
Gerenciamento do ciclo de vida do Aplicativo ✔️ ✔️
Suporte a registros de contêiner ✔️ ✔️
Atribuir ponto de extremidade ✔️ ✔️
Azure Monitor ✔️ ✔️
Integração com APM ✔️ ✔️ Com suporte a instalação manual.
Implantação azul/verde ✔️ ✔️
Domínio personalizado ✔️ ✔️
Escala – dimensionamento automático ✔️ ✔️
Escala – dimensionamento manual (aumentar/diminuir a escala horizontal, aumentar/diminuir a escala vertical) ✔️ ✔️
Identidade gerenciada ✔️ ✔️
Servidor de Configuração e Servidor Eureka do Spring Cloud ✔️
Portal de API para VMware Tanzu ✔️ ✔️ Somente plano empresarial.
Spring Cloud Gateway para VMware Tanzu ✔️ ✔️ Somente plano empresarial.
Serviço de configuração de aplicativos para o VMware Tanzu ✔️ Somente plano empresarial.
Exibição dinâmica do aplicativo para VMware Tanzu ✔️ Somente plano empresarial.
Registro de serviço do VMware Tanzu ✔️ Somente plano empresarial.
VNET ✔️ ✔️ Adicionar registro à lista de permitidos no NSG ou no Firewall do Azure.
Endereço IP de saída ✔️ ✔️
TLS E2E ✔️ ✔️ Confiar em uma AC autoassinada.
Configurações de atividade e preparação ✔️ ✔️
Solução avançada de problemas – despejo de thread/heap/JFR ✔️ A imagem deverá incluir Bash e o JDK com PATH especificado.
Traga seu próprio armazenamento ✔️ ✔️
Integrar a associação de serviço ao Conector de Recursos ✔️
Zona de disponibilidade ✔️ ✔️
Eventos de ciclo de vida de aplicativo ✔️ ✔️
Tamanho reduzido do aplicativo – 0,5 vCPU e 512 MB ✔️ ✔️
Automatizar implantações de aplicativo com o Terraform ✔️ ✔️
Exclusão reversível ✔️ ✔️
Experiência interativa de diagnóstico (baseada em AppLens) ✔️ ✔️
SLA ✔️ ✔️

Observação

Os aplicativos Polyglot incluem aplicativos não Spring Boot Java, NodeJS, AngularJS, Python e .NET.

Pontos comuns a se ter em mente na implantação com um contêiner personalizado

Os pontos a seguir ajudarão você a lidar com situações comuns na implantação com uma imagem personalizada.

Confiar em uma Autoridade de Certificação

Há duas opções para confiar em uma Autoridade de Certificação:

Opção 1: carregar por meio de Aplicativos Spring do Azure

Para carregar os certificados de Autoridade de Certificação nos aplicativos, consulte Usar certificados SSL/TLS no aplicativo nos Aplicativos Spring do Azure. Em seguida, os certificados serão montados no local /etc/azure-spring-cloud/certs/public/.

Opção 2: instalação manual na imagem

Para confiar em uma AC na imagem, defina as seguintes variáveis, dependendo do ambiente:

  • Você precisa importar aplicativos Java para o repositório confiável adicionando as seguintes linhas ao Dockerfile:

    ADD EnterpriseRootCA.crt /opt/
    RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
    
  • Para aplicativos Node.js, defina a variável de ambiente NODE_EXTRA_CA_CERTS:

    ADD EnterpriseRootCA.crt /opt/
    ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
    
  • Para Python ou outras linguagens que dependam do repositório de AC do sistema, em imagens de Debian ou Ubuntu, adicione as seguintes variáveis de ambiente:

    ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/
    RUN /usr/sbin/update-ca-certificates
    
  • Para Python ou outras linguagens que dependam do repositório de AC do sistema, em imagens baseadas em CentOS ou Fedora, adicione as seguintes variáveis de ambiente:

    ADD EnterpriseRootCA.crt /etc/pki/ca-trust/source/anchors/
    RUN /usr/bin/update-ca-trust
    

Evitar comportamento inesperado quando as imagens forem alteradas

Quando o aplicativo for reiniciado ou dimensionado, o pull da imagem mais recente sempre será efetuado. Se a imagem tiver sido alterada, as instâncias de aplicativo recém-iniciadas usarão a nova imagem; já as instâncias antigas continuarão a usar a imagem antiga.

Observação

Evite usar a marca latest ou substituir a imagem sem uma alteração de marca para evitar um comportamento inesperado do aplicativo.

Evitar a incapacidade de se conectar ao registro de contêiner em uma VNet

Se você implantou a instância em uma VNet, permita o tráfego de rede para o registro de contêiner no NSG ou no Firewall do Azure (se usado). Para obter mais informações, confira Responsabilidades do cliente na execução da VNet a fim de adicionar as regras de segurança necessárias.

Instalar um APM na imagem manualmente

As etapas de instalação variam em diferentes APMs (monitores de desempenho de aplicativos) e idiomas. As etapas a seguir são para New Relic com aplicativos Java. Você precisa modificar o Dockerfile usando as seguintes etapas:

  1. Baixe e instale o arquivo do agente na imagem adicionando o seguinte ao Dockerfile:

    ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
    
  2. Adicione as variáveis de ambiente exigidas pelo APM:

    ENV NEW_RELIC_APP_NAME=appName
    ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
    
  3. Modifique o ponto de entrada da imagem com a adição de: java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar

Para instalar os agentes de outros idiomas, confira a documentação oficial dos outros agentes:

New Relic:

Dynatrace:

AppDynamics:

Vai aprender como ver os logs de contêiner

Para exibir os logs de console do aplicativo de contêiner, o seguinte comando da CLI pode ser usado:

az spring app logs \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --service <your-service-name> \
    --instance <your-instance-name>

Para exibir os logs de eventos de contêiner do Azure Monitor, insira a consulta:

AppPlatformContainerEventLogs
| where App == "hw-20220317-1b"

Captura de tela do Azure Monitor que mostra o log de eventos do contêiner.

Verificar se há vulnerabilidades na imagem

Recomendamos que você use o Microsoft Defender para Nuvem com o ACR para evitar que suas imagens fiquem vulneráveis. Para obter mais informações, consulte Microsoft Defender para Nuvem

Alternar entre implantação JAR e implantação de contêiner

É possível alternar o tipo de implantação de implantação de JAR para implantação de contêiner diretamente reimplantando com o seguinte comando:

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

Ou inversamente:

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --artifact-path <your-jar-file> \
    --service <your-service-name>

Criar outra implantação com uma implantação JAR existente

Você pode criar outra implantação usando uma implantação JAR existente com o seguinte comando:

az spring app deployment create \
    --resource-group <your-resource-group> \
    --name <your-deployment-name> \
    --app <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

CI/CD

No momento há suporte para automatização de implantações usando tarefas do Azure Pipelines ou GitHub Actions. Para obter mais informações, consulte Automatizar implantações de aplicativos para Aplicativos Spring do Azure e Usar CI/CD dos Aplicativos Spring do Azure com o GitHub Actions

Próximas etapas