Implantações de contêineres no App Service com a Azure Developer CLI

O Azure Developer CLI (azd) pode implantar seu aplicativo no Serviço de Aplicativo do Azure. Esse modo de implantação executa seu aplicativo como um Aplicativo Web Linux para Contêineres. Quando um serviço usa host: appservice com uma compilação baseada em Docker, azd deploy cria a imagem, envia a imagem para o Registro de Contêiner do Azure (ACR) e aponta um site existente do App Service para a nova imagem.

Como azd deploy atualiza apenas a referência da imagem, sua infraestrutura deve deixar o site pronto para contêiner antes de implantá-lo. Saber o que esse modo de implantação espera ajuda você a configurar o site corretamente e evitar implantações com falha.

Este artigo explica como esse modo de implantação funciona, o que sua infraestrutura já deve configurar e como ele difere do containerapp host. Pressupõe-se que você esteja familiarizado com os projetos azd, azd e os comandos de provisionamento e implantação azure.yaml.

Como o azd implanta um contêiner no Serviço de Aplicativo

Quando um serviço é configurado host: appservice com uma configuração de contêiner, azd deploy trata o site de destino como um aplicativo Web para contêineres e faz o seguinte trabalho:

  • Cria uma imagem de contêiner a partir do seu Dockerfile.
  • Envia a imagem para a instância do ACR definida pela sua infraestrutura.
  • Atualiza a configuração do site linuxFxVersion para DOCKER|<image>, para que o site use sua imagem.

azd deploy atualiza apenas a referência de imagem para um site existente. Ele não cria ou configura a infraestrutura subjacente, portanto, o site já deve estar pronto para contêiner antes da implantação.

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

Uma implantação de contêiner no App Service usa host: appservice com um build baseado em Docker. Defina language: dockerou adicione uma docker configuração que aponte para o Dockerfile:

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

Com essa configuração, azd cria a imagem a partir de ./src/web/Dockerfile, envia-a para o seu registro e atualiza o site do App Service para executar a imagem. O appservice host não aplica configurações de nível env: de serviço, portanto, defina as configurações do aplicativo por meio de sua infraestrutura.

Requisitos de infraestrutura para um site do App Service preparado para contêineres

azd deploy não provisiona nem modifica a infraestrutura do host appservice, portanto, o Bicep ou Terraform existente deve configurar o site como um aplicativo de contêiner Linux antes da implantação. A infraestrutura deve atender ao seguinte contrato:

Requirement Detalhes
Plano do App Service no Linux O plano executa o Linux (kind: linux com reserved: true). O Serviço de Aplicativo dá suporte apenas a contêineres no Linux, não Windows.
Site pronto para contêineres O linuxFxVersion do site usa um valor de DOCKER\|. Uma imagem temporária serve, porque azd deploy a substitui pela imagem que gera e envia.
Contêiner único O site roda um contêiner. O appservice host não dá suporte a configurações de vários contêineres ou Docker Compose.
Acesso ao ACR com identidade gerenciada O site é autenticado no ACR por meio de uma identidade gerenciada atribuída pelo usuário, como acrUseManagedIdentityCreds: true com acrUserManagedIdentityID. O appservice host não dá suporte a credenciais de administrador.

azd deploy em comparação com provisionamento e up

A implantação de contêiner no App Service abrange dois aspectos, infraestrutura e código do aplicativo, que correspondem a diferentes comandos azd:

Comando O que faz Quando utilizá-lo
azd provision Cria e configura recursos do Azure a partir do seu Bicep ou Terraform, incluindo o site do App Service pronto para contêineres e o ACR. Use-o quando a infraestrutura for alterada ou o site ainda não existir.
azd deploy Cria a imagem, a envia por push para o ACR e atualiza a referência de imagem do site. Não afeta a infraestrutura. Use-o para enviar alterações de aplicativo para um site já provisionado.
azd up Executa azd provision e, em seguida, azd deploy em um único comando. Use isso para uma implantação inicial ou quando quiser provisionar e implantar ao mesmo tempo.

Como azd deploy atualiza apenas a referência da imagem, uma implantação de contêiner appservice sempre depende da infraestrutura que um azd provision ou azd up anterior criou.

Validação de preparação para implantação

Antes de atualizar o site, azd deploy valide se o site de destino está pronto para contêiner. Se o site não for um aplicativo de contêiner do Linux, por exemplo, ele usará um plano Windows, não tiver um DOCKER|linuxFxVersion valor ou não tiver acesso de identidade gerenciada ao ACR, então azd deploy interromperá e retornará um erro que identifica a configuração ausente. Corrija a infraestrutura e reprovisione-a antes de implantar novamente.

Contêineres do App Service comparados ao Container Apps

Tanto os hosts appservice quanto os hosts containerapp implantam imagens de contêineres, mas gerenciam a infraestrutura e a configuração de maneira diferente:

Behavior appservice host containerapp host
Configuração de infraestrutura azd deploy atualiza apenas a referência de imagem e espera que o site já esteja pronto para contêiner. Faz o provisionamento e configura uma parte maior do ambiente de execução de contêineres para você.
Variáveis de ambiente Não aplica configurações de nível env: de serviço. Em vez disso, defina as configurações do aplicativo por meio da infraestrutura. Aplica as configurações de nível env: de serviço ao contêiner.
Suporte a poliglotas Contêineriza aplicativos em qualquer linguagem por meio de language: docker, o que é útil para runtimes sem suporte interno a azd. Contêineriza aplicativos em qualquer linguagem por meio de language: docker, o que é útil para runtimes sem suporte interno a azd.