Implantar um aplicativo com uma imagem de contêiner personalizada

Atenção

Este artigo faz referência ao CentOS, uma distribuição Linux com status de Fim de Vida (EOL). Por favor, considere o seu uso e planeje de acordo. Para obter mais informações, consulte as diretrizes de Fim da Vida Útil do CentOS.

Nota

Azure Spring Apps é o novo nome para o serviço Azure Spring Cloud. Embora o serviço tenha um novo nome, você verá o nome antigo em alguns lugares por um tempo enquanto trabalhamos para atualizar ativos, como capturas de tela, vídeos e diagramas.

Este artigo aplica-se a: ✔️ 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 oferece suporte à maioria dos recursos como na implantação de um aplicativo JAR. Outros aplicativos Java e não Java também podem ser implementados com a imagem do contêiner.

Pré-requisitos

  • Uma imagem de contêiner contendo o aplicativo.
  • A imagem é enviada por push para um registro de imagem. Para obter mais informações, consulte Azure Container Registry.

Nota

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. Você pode desativar a sonda para aplicativos que não escutam em nenhuma porta. Para obter mais informações, consulte Como configurar testes de integridade e períodos de término normais para aplicativos hospedados no Azure Spring Apps.

Implementar a sua aplicação

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 no 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 dois argumentos a seguir a qualquer um dos comandos acima:

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

Para desativar a escuta em uma porta para 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 são suportados em cada tipo de aplicativo.

Caraterística Spring Boot Apps - implantação de contêiner Polyglot Apps - implantação de contêiner Notas
Gerenciamento do ciclo de vida do aplicativo ✔️ ✔️
Apoio aos registos de contentores ✔️ ✔️
Atribuir ponto de extremidade ✔️ ✔️
Azure Monitor ✔️ ✔️
Integração com APM ✔️ ✔️ Suportado por instalação manual.
Implantação azul/verde ✔️ ✔️
Domínio personalizado ✔️ ✔️
Dimensionamento - dimensionamento automático ✔️ ✔️
Dimensionamento - dimensionamento manual (entrada/saída, up/down) ✔️ ✔️
Identidade gerida ✔️ ✔️
Spring Cloud Eureka & Config Server ✔️
Portal API para VMware Tanzu ✔️ ✔️ Apenas plano Enterprise.
Spring Cloud Gateway para VMware Tanzu ✔️ ✔️ Apenas plano Enterprise.
Serviço de configuração de aplicativos para VMware Tanzu ✔️ Apenas plano Enterprise.
Aplicação Live View para VMware Tanzu ✔️ Apenas plano Enterprise.
Registro de serviço VMware Tanzu ✔️ Apenas plano Enterprise.
VNET ✔️ ✔️ Adicione o registro à lista de permissões no NSG ou no Firewall do Azure.
Endereço IP de saída ✔️ ✔️
E2E TLS ✔️ ✔️ Confie em uma autoridade de certificação autoassinada.
Configurações de vivacidade e prontidão ✔️ ✔️
Solução de problemas avançada - thread/heap/JFR dump ✔️ A imagem deve incluir Bash e o JDK com PATH especificado.
Traga o seu próprio armazenamento ✔️ ✔️
Integrar a vinculação de serviço com o Resource Connector ✔️
Zona de Disponibilidade ✔️ ✔️
Eventos do ciclo de vida do aplicativo ✔️ ✔️
Tamanho reduzido do aplicativo - 0,5 vCPU e 512 MB ✔️ ✔️
Automatize implantações de aplicativos com o Terraform ✔️ ✔️
Eliminação suave ✔️ ✔️
Experiência de diagnóstico interativa (baseada em AppLens) ✔️ ✔️
SLA ✔️ ✔️

Nota

Os aplicativos poliglotas incluem aplicativos Java, NodeJS, AngularJS, Python e .NET que não são do Spring Boot.

Pontos comuns a serem observados ao implantar com um contêiner personalizado

Os pontos a seguir ajudarão você a resolver situações comuns ao implantar 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 através das Aplicações Azure Spring

Para carregar os certificados de CA em seus aplicativos, consulte Usar certificados TLS/SSL em seu aplicativo no Azure Spring Apps. Em seguida, os certs serão montados no local /etc/azure-spring-cloud/certs/public/.

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

Para confiar em uma autoridade de certificação na imagem, defina as seguintes variáveis, dependendo do seu ambiente:

  • Você deve importar aplicativos Java para o armazenamento confiável adicionando as seguintes linhas ao seu 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 aplicações Node.js, defina a NODE_EXTRA_CA_CERTS variável de ambiente:

    ADD EnterpriseRootCA.crt /opt/
    ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
    
  • Para Python, ou outras linguagens que dependem da loja CA do sistema, em imagens 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 dependem do armazenamento CA 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
    

Evite comportamentos inesperados quando as imagens são alteradas

Quando seu aplicativo é reiniciado ou expandido, a imagem mais recente sempre será extraída. Se a imagem tiver sido alterada, as instâncias de aplicativo recém-iniciadas usarão a nova imagem, enquanto as instâncias antigas continuarão a usar a imagem antiga.

Nota

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

Evite não ser capaz de se conectar ao registro de contêiner em uma VNet

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

Instalar um APM na imagem manualmente

As etapas de instalação variam em diferentes APMs (Application Performance Monitors) e idiomas. As etapas a seguir são para New Relic com aplicativos Java. Você deve 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 adicionando: java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar

Para instalar os agentes para outros idiomas, consulte a documentação oficial dos outros agentes:

Nova Relíquia:

Dynatrace:

AppDynamics:

Ver os registos de contentor

Para exibir os logs do console do seu 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 ecrã do Azure Monitor que mostra o registo de eventos do contentor.

Analise a sua imagem em busca de vulnerabilidades

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

Alternar entre a implantação do JAR e a implantação do contêiner

Você pode alternar o tipo de implantação de JAR para implantação de contêiner diretamente reimplantando usando 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 usando 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

A automação de implantações usando Tarefas de Pipelines do Azure ou Ações do GitHub agora é suportada. Para obter mais informações, consulte Automatizar implantações de aplicativos para aplicativos Azure Spring e Usar o Azure Spring Apps CI/CD com ações do GitHub

Próximos passos