App Service-containerdistributioner med Azure Developer CLI

Azure Developer CLI (azd) kan distribuera din app till Azure App Service. Det här distributionsläget kör din app som en Linux-webbapp för containrar. När en tjänst använder host: appservice med en Docker-baserad version, azd deploy skapar avbildningen, push-överför den till Azure Container Registry (ACR) och pekar en befintlig App Service-webbplats mot den nya avbildningen.

Eftersom azd deploy endast uppdaterar avbildsreferensen måste din infrastruktur göra webbplatsen containerklar innan du distribuerar. Att veta vad det här distributionsläget förväntar sig hjälper dig att konfigurera platsen korrekt och undvika misslyckade distributioner.

Den här artikeln förklarar hur det här distributionsläget fungerar, vad som redan måste vara konfigurerat i din infrastruktur och hur det skiljer sig från containerapp-värden. Det förutsätter att du är bekant med azd projekt, azure.yamloch azd etablerings- och distributionskommandona.

Så här distribuerar azd en container till App Service

När en tjänst anges host: appservice med en containerkonfiguration behandlar azd deploy målwebbplatsen som en webbapp för containrar och utför följande arbete:

  • Skapar en containeravbildning från Dockerfile.
  • Skickar avbildningen till den ACR-instans som din infrastruktur definierar.
  • Uppdaterar webbplatsens inställning för linuxFxVersion till DOCKER|<image> så att webbplatsen kör din avbild.

azd deploy uppdaterar endast bildreferensen för en befintlig plats. Den skapar eller konfigurerar inte den underliggande infrastrukturen, så platsen måste redan vara containerklar innan du distribuerar den.

Tjänstkonfiguration i azure.yaml

En containerdistribution till App Service använder host: appservice med en Docker-baserad build. Ange language: dockereller lägg till en docker konfiguration som pekar på din Dockerfile:

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

Med den här konfigurationen azd skapar du avbildningen från ./src/web/Dockerfile, push-överför den till registret och uppdaterar App Service-webbplatsen för att köra avbildningen. Värden appservice tillämpar inte inställningar på tjänstnivå env:, så konfigurera appinställningar via din infrastruktur i stället.

Infrastrukturkrav för en containerklar App Service-webbplats

azd deploy etablerar eller ändrar inte någon infrastruktur för värden appservice, så din befintliga Bicep- eller Terraform-konfiguration måste konfigurera webbplatsen som Linux-containerapp innan du distribuerar. Infrastrukturen måste uppfylla följande kontrakt:

Krav Detaljer
Linux App Service-plan Planen kör Linux (kind: linux med reserved: true). App Service stöder endast containrar på Linux, inte Windows.
Containerklar plats Webbplatsens linuxFxVersion använder ett värde av typen DOCKER\|. En platshållarbild är okej, eftersom azd deploy ersätter den med den bild som den bygger och pushar.
Enskild container Webbplatsen kör en container. Värden appservice stöder inte konfigurationer med flera containrar eller Docker Compose-konfigurationer.
ACR-åtkomst med hanterad identitet Webbplatsen autentiserar till ACR via en användartilldelad hanterad identitet, till exempel acrUseManagedIdentityCreds: true med acrUserManagedIdentityID. Värden appservice stöder inte administratörsautentiseringsuppgifter.

azd deploy jämfört med provision och up

Distribution av containrar till App Service omfattar två områden, infrastruktur och programkod, som motsvarar olika azd-kommandon:

Command Vad det gör När du ska använda detta
azd provision Skapar och konfigurerar Azure-resurser utifrån din Bicep- eller Terraform-konfiguration, inklusive den containerfärdiga App Service-webbplatsen och ACR. Använd den när infrastrukturen ändras eller om webbplatsen inte finns ännu.
azd deploy Skapar avbildningen, push-överför den till ACR och uppdaterar webbplatsens avbildningsreferens. Det rör inte infrastrukturen. Använd den för att skicka programändringar till en redan etablerad plats.
azd up Kör azd provision och sedan azd deploy i ett enda kommando. Använd den vid en första driftsättning, eller när du vill provisionera och driftsätta samtidigt.

Eftersom azd deploy endast uppdaterar bildreferensen beror en appservice containerdriftsättning alltid på infrastruktur som en tidigare azd provision eller azd up har skapat.

Validering av distributionsberedskap

Innan du uppdaterar platsen azd deploy kontrollerar du att målplatsen är containerklar. Om webbplatsen inte är en Linux-containerapp, till exempel om den använder en Windows-plan, saknar värdet DOCKER|linuxFxVersion eller saknar åtkomst till ACR via hanterad identitet, stoppas azd deploy och returnerar ett fel som identifierar den konfiguration som saknas. Åtgärda infrastrukturen och etablera den på nytt innan du distribuerar igen.

App Service-containrar jämfört med Container Apps

appservice Både värdar och containerapp distribuerar containeravbildningar, men de hanterar infrastruktur och konfiguration på olika sätt:

Behavior appservice värd containerapp värd
Infrastrukturkonfiguration azd deploy uppdaterar endast avbildningsreferensen och förväntar sig att platsen redan är containerklar. Tillhandahåller och konfigurerar mer av containerkörmiljön åt dig.
Miljövariabler Tillämpar inte inställningar på tjänstnivå env: . Konfigurera appinställningar via infrastrukturen i stället. Tillämpar inställningar på tjänstnivå env: för containern.
Stöd för flerspråkiga Kapslar in appar på valfritt språk via language: docker, vilket är användbart för runtime-miljöer utan inbyggt azd-stöd. Containeriserar appar på valfritt språk via language: docker, vilket är användbart för körmiljöer utan inbyggt azd-stöd.