Implementações de contentores no App Service com o Azure Developer CLI

O Azure Developer CLI (azd) pode implementar a sua aplicação para o Serviço de Aplicações do Azure. Este modo de implementação executa a sua aplicação como uma Web App Linux para Containers. Quando um serviço utiliza host: appservice com uma compilação baseada em Docker, azd deploy cria a imagem, envia-a para o Azure Container Registry (ACR) e faz com que um site do App Service existente passe a apontar para a nova imagem.

Como azd deploy só atualiza a referência da imagem, a sua infraestrutura tem de preparar o site para contentores antes da implementação. Saber o que este modo de implementação espera ajuda-o a configurar o site corretamente e a evitar falhas de implementação.

Este artigo explica como funciona esse modo de implementação, o que a sua infraestrutura já deve configurar e como difere do containerapp host. Pressupõe que estás familiarizado com azd projetos, azure.yaml, e com os azd comandos de provisionamento e implementação.

Como o azd implementa um contentor no App Service

Quando um serviço define host: appservice com uma configuração de contentor, azd deploy trata o site de destino como uma Web App for Containers e executa as seguintes operações:

  • Constrói uma imagem de contentor a partir do teu Dockerfile.
  • Envia a imagem para a instância ACR que a sua infraestrutura define.
  • Atualiza a definição do site linuxFxVersion para DOCKER|<image>, para que o site execute a sua imagem.

azd deploy atualiza apenas a referência da imagem de um site existente. Não cria nem configura a infraestrutura subjacente, por isso o site já deve estar pronto para contentores antes de implementar.

Configuração do serviço em azure.yaml

Uma implementação de um contentor no App Service utiliza host: appservice com uma compilação baseada em Docker. Defina language: docker, ou adicione uma docker configuração que aponte para o seu Dockerfile:

services:
  web:
    project: ./src/web
    host: appservice
    language: docker
    docker:
      path: ./Dockerfile

Com esta configuração, azd constrói a imagem a partir de ./src/web/Dockerfile, envia-a para o seu registo e atualiza o site do App Service para executar a imagem. O appservice anfitrião não aplica definições de nível env: de serviço, por isso configura as definições da aplicação através da tua infraestrutura.

Requisitos de infraestrutura para um site de App Service pronto para contentores

azd deploy não aprovisiona nem modifica a infraestrutura para o host appservice, por isso o seu Bicep ou Terraform existente tem de configurar o site como uma aplicação de contentor Linux antes de implementar. A infraestrutura deve cumprir o seguinte contrato:

Requisito Detalhes
Plano do Serviço de Aplicações Linux O plano executa Linux (kind: linux com reserved: true). O App Service suporta contentores apenas no Linux, não no Windows.
Sítio preparado para contentores O site linuxFxVersion utiliza um valor DOCKER\|. Uma imagem provisória é aceitável, porque azd deploy substitui-la pela imagem que constrói e promove.
Contentor individual O site gere um contentor único. O appservice host não suporta configurações multi-container nem Docker Compose.
Acesso ao ACR com identidade gerida O site autentica-se ao ACR através de uma identidade gerida atribuída pelo utilizador, como acrUseManagedIdentityCreds: true com acrUserManagedIdentityID. O appservice anfitrião não suporta credenciais de administrador.

Azd Deploy comparado com Provision e Up

A implementação de contentores no App Service abrange dois aspetos, a infraestrutura e o código da aplicação, que correspondem a comandos azd diferentes:

Comando O que faz Quando utilizá-lo
azd provision Cria e configura recursos do Azure a partir do Bicep ou do Terraform, incluindo o site do Azure App Service preparado para contentores e o ACR. Usa-o quando a tua infraestrutura mudar ou o site ainda não existir.
azd deploy Constrói a imagem, envia-a para o ACR e atualiza a referência da imagem do site. Não toca na infraestrutura. Use-o para enviar alterações na aplicação para um site já provisionado.
azd up Executa azd provision e depois azd deploy num único comando. Usa-o para uma primeira implementação, ou quando quiseres provisionar e implementar em conjunto.

Como azd deploy apenas atualiza a referência da imagem, uma implementação de contentor appservice depende sempre da infraestrutura criada por uma execução anterior de azd provision ou azd up.

Validação da prontidão de implantação

Antes de atualizar o site, azd deploy valida se o site-alvo é compatível com contentores. Se o site não for uma aplicação em contentor Linux, por exemplo, se utilizar um plano do Windows, não tiver um valor DOCKER|linuxFxVersion ou não tiver acesso ao ACR através de identidade gerida, então, azd deploy para e devolve um erro que identifica a configuração em falta. Corrige a infraestrutura e reabasteça antes de voltar a implementar.

Contentores no App Service em comparação com o Container Apps

Tanto os anfitriões appservice como os containerapp implementam imagens de contentor, mas gerem a infraestrutura e a configuração de forma diferente:

Comportamento appservice anfitrião containerapp anfitrião
Configuração da infraestrutura azd deploy atualiza apenas a referência da imagem e espera que o site já esteja pronto para contentores. Aprovisiona e configura por si uma parte maior do ambiente de execução de contentores.
Variáveis ambientais Não aplica definições de nível env: de serviço. Em vez disso, configure as definições da aplicação na sua infraestrutura. Aplica definições de nível env: de serviço ao contentor.
Suporte poliglota Coloca aplicações em contentores em qualquer linguagem por meio de language: docker, o que é útil para ambientes de execução sem suporte incorporado para azd. Permite contentorizar aplicações escritas em qualquer linguagem através de language: docker, o que é útil para ambientes de execução sem suporte incorporado para azd.