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:
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
Adicione as variáveis de ambiente exigidas pelo APM:
ENV NEW_RELIC_APP_NAME=appName ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
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:
- Python: Instalar o agente do Python
- Node.js: instalar o agente Node.js
Dynatrace:
- Python: instrumentar aplicativos Python com OpenTelemetry
- Node.js: instrumentar aplicativos Node.js com OpenTelemetry
AppDynamics:
- Python: instalar o Agente Python
- Node.js: instalando o agente Node.js
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"
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