Déploiements de conteneurs App Service avec Azure Developer CLI

Azure Developer CLI (azd) peut déployer votre application sur Azure App Service. Ce mode de déploiement exécute votre application en tant qu’application web Linux pour conteneurs. Lorsqu’un service utilise host: appservice avec une build Docker, azd deploy génère l’image, l’envoie à Azure Container Registry (ACR) et pointe un site App Service existant sur la nouvelle image.

Étant donné que azd deploy met à jour uniquement la référence de l’image, votre infrastructure doit rendre le site compatible avec les conteneurs avant le déploiement. Connaître ce que ce mode de déploiement attend vous aide à configurer le site correctement et à éviter les déploiements ayant échoué.

Cet article explique comment fonctionne le mode de déploiement, ce que votre infrastructure doit déjà configurer et comment elle diffère de l’hôte containerapp . Il part du principe que vous connaissez les azd projets, azure.yamlainsi que les azd commandes d’approvisionnement et de déploiement.

Comment azd déploie un conteneur sur App Service

Lorsqu’un service définit host: appservice une configuration de conteneur, azd deploy traite le site cible comme une application web pour conteneurs et effectue les opérations suivantes :

  • Génère une image conteneur à partir de votre fichier Dockerfile.
  • Envoie l’image à l’instance ACR définie par votre infrastructure.
  • Met à jour le paramètre du site linuxFxVersion sur DOCKER|<image> afin que le site utilise votre image.

azd deploy met à jour uniquement la référence d’image pour un site existant. Il ne crée pas ou ne configure pas l’infrastructure sous-jacente. Par conséquent, le site doit déjà être prêt pour le conteneur avant de déployer.

Configuration du service dans azure.yaml

Un déploiement de conteneur sur App Service utilise host: appservice avec une build Docker. Définissez language: dockerou ajoutez une docker configuration qui pointe vers votre fichier Dockerfile :

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

Avec cette configuration, azd génère l’image à partir de ./src/web/Dockerfile, l’envoie (push) à votre registre et met à jour le site App Service pour exécuter l’image. L’hôte appservice n’applique pas les paramètres de niveau env: de service. Configurez donc les paramètres d’application via votre infrastructure à la place.

Exigences d’infrastructure pour un site App Service prêt pour les conteneurs

azd deployne provisionne pas ou ne modifie pas l'infrastructure de lappservice'hôte. Par conséquent, votre Bicep ou Terraform existant doit configurer le site en tant qu'application conteneur Linux avant de déployer. L’infrastructure doit satisfaire au contrat suivant :

Requirement Détails
Plan App Service sous Linux Le plan exécute Linux (kind: linux avec reserved: true). App Service prend uniquement en charge les conteneurs sur Linux, pas Windows.
Site prêt pour le conteneur Le linuxFxVersion du site utilise une valeur DOCKER\|. Une image de substitution convient, car azd deploy la remplace par l’image qu’il génère et pousse.
Conteneur unique Le site s’exécute dans un conteneur. L’hôte appservice ne prend pas en charge les configurations multiconteneur ou Docker Compose.
Accès à ACR via une identité gérée Le site s’authentifie auprès d’ACR à l’aide d’une identité managée attribuée par l’utilisateur, par exemple acrUseManagedIdentityCreds: true avec acrUserManagedIdentityID. L’hôte appservice ne prend pas en charge les informations d’identification de l’administrateur.

azd deploy par rapport à provision et up

Le déploiement de conteneurs sur App Service couvre deux aspects, l’infrastructure et le code de l’application, qui correspondent à des commandes azd différentes :

Commande Qu’est-ce que cela fait ? Quand l′utiliser ?
azd provision Crée et configure des ressources Azure à partir de votre Bicep ou Terraform, y compris le site App Service prêt pour les conteneurs et ACR. Utilisez-la lorsque votre infrastructure change ou que le site n’existe pas encore.
azd deploy Génère l’image, l’envoie (push) à ACR et met à jour la référence d’image du site. Elle ne touche pas à l’infrastructure. Utilisez-le pour expédier des modifications d’application à un site déjà approvisionné.
azd up Exécute azd provision , puis azd deploy dans une seule commande. Utilisez-le pour un déploiement de première fois, ou lorsque vous souhaitez provisionner et déployer ensemble.

Parce que azd deploy ne met à jour que la référence de l’image, un déploiement de conteneur appservice dépend toujours de l’infrastructure créée précédemment par azd provision ou azd up.

Validation de la préparation du déploiement

Avant de mettre à jour le site, azd deploy vérifie que le site cible est prêt pour le conteneur. Si le site n’est pas une application conteneurisée Linux, par exemple s’il utilise un plan Windows, ne comporte pas de valeur DOCKER|linuxFxVersion ou si l’identité managée n’a pas accès à ACR, alors azd deploy s’arrête et renvoie une erreur indiquant la configuration manquante. Corrigez l’infrastructure et reprovisionnez-la avant de déployer à nouveau.

Comparaison entre les conteneurs d’App Service et Container Apps

Les hôtes containerapp et appservice déploient des images de conteneur, mais ils gèrent l’infrastructure et la configuration différemment :

Behavior appservice hôte containerapp hôte
Configuration de l’infrastructure azd deploy met à jour uniquement la référence de l’image et suppose que le site est déjà compatible avec les conteneurs. Provisionne et configure une plus grande partie de l’environnement d’exécution des conteneurs à votre place.
Variables d’environnement N’applique pas les paramètres de niveau env: de service. Configurez plutôt les paramètres d’application via votre infrastructure. Applique les paramètres de niveau env: de service au conteneur.
Prise en charge polyglotte Permet de conteneuriser des applications écrites dans n’importe quel langage grâce à language: docker, ce qui est utile pour les environnements d’exécution sans support azd intégré. Conteneurise les applications dans n’importe quel langage grâce à language: docker, ce qui est utile pour les environnements d’exécution sans prise en charge intégrée de azd.