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
Os planos Basic, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de aposentadoria de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para obter mais informações, consulte o anúncio de aposentadoria do Azure Spring Apps.
O plano de consumo padrão 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 obter mais informações, consulte Migrar consumo padrão e plano dedicado do Azure Spring Apps para Aplicativos de Contêiner do Azure.
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:
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 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:
- Python: Instale o agente Python
- Node.js: Instalar o agente Node.js
Dynatrace:
- Python: Instrumente aplicações Python com OpenTelemetry
- Node.js: Aplicações de Node.js de instrumentos com OpenTelemetry
AppDynamics:
- Python: Instale o Agente Python
- Node.js: Instalando o Node.js Agent
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"
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