Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
linuxFxVersionaDOCKER|<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. |