Implementaciones de contenedores de App Service con Azure CLI para desarrolladores

Azure CLI para desarrolladores (azd) puede implementar la aplicación en Azure App Service. Este modo de implementación ejecuta la aplicación como una aplicación web linux para contenedores. Cuando un servicio usa host: appservice con una compilación basada en Docker, azd deploy compila la imagen, la inserta en Azure Container Registry (ACR) y apunta un sitio de App Service existente en la nueva imagen.

Dado que azd deploy solo actualiza la referencia a la imagen, su infraestructura debe dejar el sitio listo para contenedores antes de implementarlo. Saber lo que espera este modo de implementación le ayuda a configurar el sitio correctamente y a evitar implementaciones con errores.

En este artículo se explica cómo funciona ese modo de implementación, qué debe estar ya configurado en su infraestructura y cómo difiere del containerapp host. Se asume que está familiarizado con proyectos azd, azure.yaml, y los comandos de aprovisionamiento e implementación de azd.

Cómo azd implementa un contenedor en App Service

Cuando un servicio establece host: appservice con una configuración de contenedor, azd deploy trata el sitio de destino como una aplicación web para contenedores y hace lo siguiente:

  • Compila una imagen de contenedor a partir del Dockerfile.
  • Envía la imagen a la instancia de ACR que define su infraestructura.
  • Actualiza la configuración del sitio linuxFxVersion a DOCKER|<image> para que el sitio use tu imagen.

azd deploy actualiza solo la referencia de imagen de un sitio existente. No crea ni configura la infraestructura subyacente, por lo que el sitio ya debe estar listo para contenedores antes de implementarlo.

Configuración del servicio en azure.yaml

Una implementación de contenedor en App Service usa host: appservice con una compilación basada en Docker. Establezca language: docker, o agregue una configuración docker que apunte a su Dockerfile:

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

Con esta configuración, azd compila la imagen a partir de ./src/web/Dockerfile, la inserta en el registro y actualiza el sitio de App Service para ejecutar la imagen. El appservice host no aplica la configuración de nivel env: de servicio, por lo que configura la configuración de la aplicación a través de la infraestructura en su lugar.

Requisitos de infraestructura para un sitio de App Service listo para contenedores

azd deployno aprovisiona ni modifica la infraestructura para el appservice host, por lo que el Bicep existente o Terraform debe configurar el sitio como una aplicación de contenedor de Linux antes de implementarlo. La infraestructura debe cumplir el siguiente contrato:

Requirement Detalles
Plan de App Service de Linux El plan ejecuta Linux (kind: linux con reserved: true). App Service solo admite contenedores en Linux, no Windows.
Sitio listo para contenedores El linuxFxVersion del sitio usa un valor DOCKER\|. Una imagen de marcador de posición está bien, porque azd deploy la sustituye por la imagen que compila y publica.
Contenedor único El sitio ejecuta un contenedor. El appservice host no admite configuraciones de varios contenedores ni docker Compose.
Acceso a ACR mediante identidad administrada El sitio se autentica en ACR a través de una identidad administrada asignada por el usuario, como acrUseManagedIdentityCreds: true con acrUserManagedIdentityID. El appservice host no admite credenciales de administrador.

azd deploy frente a provision y up

La implementación de contenedores en App Service abarca dos aspectos, la infraestructura y el código de la aplicación, que se corresponden con distintos comandos azd:

Comando Qué hace Cuándo usarlo
azd provision Crea y configura recursos de Azure a partir de Bicep o Terraform, incluidos el sitio de App Service preparado para contenedores y ACR. Úselo cuando cambie la infraestructura o el sitio aún no exista.
azd deploy Compila la imagen, la inserta en ACR y actualiza la referencia de imagen del sitio. No toca la infraestructura. Úselo para enviar cambios de aplicación a un sitio ya aprovisionado.
azd up Ejecuta azd provision y, a continuación, azd deploy en un solo comando. Úselo para una primera implementación o cuando quiera realizar el aprovisionamiento y la implementación conjuntamente.

Dado que azd deploy solo actualiza la referencia de imagen, una appservice implementación de contenedor siempre depende de la infraestructura anterior azd provision o azd up creada.

Validación de la preparación de la implementación

Antes de actualizar el sitio, azd deploy valida que el sitio de destino está listo para el contenedor. Si el sitio no es una aplicación contenedora de Linux, por ejemplo, usa un plan de Windows, falta un DOCKER|linuxFxVersion valor o carece de acceso de identidad administrada a ACR, azd deploy se detiene y devuelve un error que identifica la configuración que falta. Corrija la infraestructura y reaprovisione antes de volver a desplegar.

Contenedores de App Service en comparación con Container Apps

Tanto los hosts containerapp como los hosts appservice despliegan imágenes de contenedor, pero gestionan la infraestructura y la configuración de forma diferente:

Comportamiento appservice anfitrión containerapp anfitrión
Configuración de la infraestructura azd deploy actualiza solo la referencia a la imagen y espera que el sitio ya esté preparado para contenedores. Aprovisiona y configura una mayor parte del entorno de ejecución del contenedor.
Variables de entorno No aplica la configuración de nivel env: de servicio. En su lugar, configure las opciones de la aplicación a través de la infraestructura. Aplica la configuración de nivel env: de servicio al contenedor.
Compatibilidad con varios lenguajes Permite contenerizar aplicaciones en cualquier lenguaje a través de language: docker, lo que resulta útil para los entornos de ejecución sin compatibilidad integrada con azd. Permite ejecutar aplicaciones de cualquier lenguaje en contenedores a través de language: docker, lo que resulta útil para los entornos de ejecución sin compatibilidad integrada con azd.