Wdrożenia kontenerów usługi App Service za pomocą interfejsu wiersza polecenia dewelopera Azure

Azure Developer CLI (azd) umożliwia wdrożenie aplikacji do usługi Azure App Service. Ten tryb wdrażania uruchamia aplikację jako aplikację internetową systemu Linux dla kontenerów. Gdy usługa korzysta z host: appservice z kompilacją opartą na Dockerze, azd deploy kompiluje obraz, przesyła go do usługi Azure Container Registry (ACR) i ustawia istniejącą witrynę usługi App Service tak, aby używała nowego obrazu.

Ponieważ azd deploy aktualizuje tylko odwołanie do obrazu kontenera, przed wdrożeniem infrastruktura musi przygotować witrynę do uruchomienia w kontenerze. Wiedza o tym, czego wymaga ten tryb wdrażania, pomaga poprawnie skonfigurować witrynę i uniknąć nieudanych wdrożeń.

W tym artykule wyjaśniono, jak działa ten tryb wdrażania, co musi być już skonfigurowane w infrastrukturze i czym różni się od hosta containerapp. Zakłada się, że znasz projekty azd, azure.yaml oraz polecenia azd dotyczące aprowizacji i wdrażania.

Jak azd wdraża kontener w usłudze App Service

Gdy usługa ustawia konfigurację host: appservice kontenera, azd deploy traktuje witrynę docelową jako aplikację internetową dla kontenerów i wykonuje następujące czynności:

  • Tworzy obraz kontenera z pliku Dockerfile.
  • Wysyła obraz do instancji ACR zdefiniowanej w infrastrukturze.
  • Aktualizuje ustawienie witryny linuxFxVersion na DOCKER|<image>, aby witryna uruchamiała Twój obraz.

azd deploy aktualizuje tylko odwołanie do obrazu dla istniejącej witryny. Nie tworzy ani nie konfiguruje infrastruktury bazowej, dlatego przed wdrożeniem witryna musi być już przystosowana do konteneryzacji.

Konfiguracja usługi w pliku azure.yaml

Wdrożenie kontenera do usługi App Service używa host: appservice z kompilacją opartą na Dockerze. Ustaw language: docker lub dodaj konfigurację docker, która wskazuje na plik Dockerfile:

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

Dzięki tej konfiguracji azd kompiluje obraz na podstawie pliku ./src/web/Dockerfile, wypycha go do rejestru i aktualizuje witrynę w usłudze App Service, aby uruchamiała ten obraz. Host appservice nie stosuje ustawień na poziomie env: usługi, dlatego zamiast tego skonfiguruj ustawienia aplikacji za pośrednictwem infrastruktury.

Wymagania dotyczące infrastruktury dla witryny usługi App Service gotowej do użycia w kontenerze

azd deploy nie aprowizuje ani nie modyfikuje infrastruktury dla hosta appservice, więc istniejąca konfiguracja w Bicep lub Terraform musi skonfigurować witrynę jako aplikację kontenerową systemu Linux przed wdrożeniem. Infrastruktura musi spełniać następujący kontrakt:

Requirement Details
Plan usługi App Service dla systemu Linux Plan działa w systemie Linux (kind: linux z reserved: true). Usługa App Service obsługuje tylko kontenery w systemie Linux, a nie Windows.
Witryna gotowa do użycia w kontenerze linuxFxVersion witryny ma wartość DOCKER\|. Obraz zastępczy jest w porządku, ponieważ azd deploy zastępuje go obrazem, który kompiluje i wypycha.
Pojedynczy kontener Witryna działa w jednym kontenerze. appservice Host nie obsługuje konfiguracji wielokontenerowych ani docker Compose.
Dostęp do usługi ACR tożsamości zarządzanej Witryna uwierzytelnia się w usłudze ACR za pomocą tożsamości zarządzanej przypisanej przez użytkownika, takiej jak acrUseManagedIdentityCreds: true .acrUserManagedIdentityID appservice Host nie obsługuje poświadczeń administratora.

azd deploy w porównaniu z provision i up

Wdrożenie kontenera w usłudze App Service obejmuje dwa obszary: infrastrukturę i kod aplikacji, które odpowiadają różnym poleceniom azd:

Command Do czego służy Kiedy należy go używać
azd provision Tworzy i konfiguruje zasoby Azure na podstawie plików Bicep lub Terraform, w tym witrynę App Service przystosowaną do kontenerów oraz ACR. Użyj go, gdy infrastruktura ulegnie zmianie lub lokacja jeszcze nie istnieje.
azd deploy Tworzy obraz, wypycha go do usługi ACR i aktualizuje odwołanie do obrazu witryny. Nie dotyka infrastruktury. Służy do dostarczania zmian aplikacji do już aprowizowanej witryny.
azd up Uruchamia azd provision, a następnie azd deploy za pomocą jednego polecenia. Użyj tej opcji przy pierwszym wdrożeniu lub gdy chcesz jednocześnie przygotować zasoby i przeprowadzić wdrożenie.

Ponieważ azd deploy tylko aktualizuje odniesienie do obrazu, wdrożenie kontenera appservice zawsze zależy od infrastruktury utworzonej wcześniej przez azd provision lub azd up.

Walidacja gotowości wdrożenia

Przed zaktualizowaniem witryny azd deploy sprawdza, czy witryna docelowa jest gotowa do pracy w kontenerze. Jeśli witryna nie jest na przykład aplikacją kontenerową systemu Linux, używa planu Windows, brakuje wartości DOCKER|linuxFxVersion lub tożsamość zarządzana nie ma dostępu do usługi ACR, wówczas azd deploy zatrzymuje się i zwraca błąd wskazujący brakującą konfigurację. Popraw infrastrukturę i skonfiguruj ją ponownie, zanim wdrożysz ją ponownie.

Kontenery usługi App Service w porównaniu z usługą Container Apps

Zarówno host appservice, jak i host containerapp, wdrażają obrazy kontenerów, ale inaczej zarządzają infrastrukturą i konfiguracją:

Behavior appservice host containerapp host
Konfiguracja infrastruktury azd deploy aktualizuje tylko odwołanie do obrazu i oczekuje, że witryna będzie już gotowa do użycia w kontenerze. Udostępnia i konfiguruje za Ciebie większą część środowiska uruchomieniowego kontenera.
Zmienne środowiskowe Nie stosuje ustawień na poziomie env: usługi. Zamiast tego skonfiguruj ustawienia aplikacji za pomocą infrastruktury. Stosuje ustawienia na poziomie env: usługi do kontenera.
Obsługa wielu języków Konteneryzuje aplikacje napisane w dowolnym języku za pomocą language: docker, co jest przydatne w przypadku środowisk uruchomieniowych bez wbudowanej obsługi azd. Umożliwia konteneryzację aplikacji napisanych w dowolnym języku za pomocą language: docker, co jest przydatne dla środowisk uruchomieniowych bez wbudowanej obsługi azd.