Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Usługa Azure App Service udostępnia wstępnie zdefiniowane stosy aplikacji, takie jak ASP.NET lub Node.js, w systemie Windows. Te stosy aplikacji internetowych działają na platformie IIS. Wstępnie skonfigurowane środowisko systemu Windows zabezpiecza system operacyjny przed:
- Dostęp administracyjny.
- Instalacje oprogramowania.
- Zmiany w globalnej pamięci podręcznej zestawów.
Aby uzyskać więcej informacji, zobacz Funkcje systemu operacyjnego w usłudze App Service.
Możesz wdrożyć z programu Visual Studio niestandardowo skonfigurowany obraz systemu Windows zawierający zmiany systemu operacyjnego wymagane przez aplikację. Dzięki temu można łatwo migrować aplikację działającą lokalnie, która wymaga niestandardowej konfiguracji systemu operacyjnego i oprogramowania. W tym samouczku pokazano, jak przeprowadzić migrację do usługi App Service aplikacji ASP.NET, która korzysta z niestandardowych czcionek zainstalowanych w bibliotece czcionek systemu Windows. Wdrażasz niestandardowy obraz systemu Windows z programu Visual Studio do usługi Azure Container Registry , a następnie uruchamiasz go w usłudze App Service.
Wymagania wstępne
- Utwórz konto usługi Docker Hub.
- Zainstaluj program Docker for Windows.
- Skonfiguruj platformę Docker do uruchamiania kontenerów Windows.
-
Zainstaluj program Visual Studio 2022 przy użyciu obciążeń roboczych ASP.NET i tworzenia aplikacji internetowych oraz tworzenia aplikacji na platformie Azure. Jeśli masz już zainstalowany program Visual Studio 2022:
- Zainstaluj najnowsze aktualizacje w programie Visual Studio, wybierając Pomoc>Sprawdź dostępność aktualizacji.
- Dodaj obciążenia w programie Visual Studio, wybierając Narzędzia>Pobierz narzędzia i funkcje.
Skonfiguruj aplikację lokalnie
Pobierz próbkę
W tym kroku konfigurujesz lokalny projekt .NET.
- Pobierz przykładowy projekt.
- Wyodrębnij (rozpakuj) plik custom-font-win-container-master.zip.
Przykładowy projekt zawiera prostą aplikację ASP.NET, która używa niestandardowej czcionki zainstalowanej w bibliotece czcionek systemu Windows. Nie trzeba instalować czcionek. Przykład jest jednak przykładem aplikacji zintegrowanej z bazowym systemem operacyjnym. Aby przeprowadzić migrację takiej aplikacji do usługi App Service, należy zmienić architekturę jej kodu w celu usunięcia integracji lub zmigrować ją w takim stanie, w jakim jest, korzystając z niestandardowego kontenera systemu Windows.
Zainstaluj czcionkę
W Eksploratorze Windows przejdź do pozycji custom-font-win-container-master/CustomFontSample, kliknij prawym przyciskiem myszy FrederickatheGreat-Regular.ttf i wybierz polecenie Zainstaluj.
Ta czcionka jest dostępna publicznie w serwisie Google Fonts.
Uruchom aplikację
Otwórz plik custom-font-win-container-master/CustomFontSample.sln w programie Visual Studio.
Naciśnij Ctrl+F5 , aby uruchomić aplikację bez debugowania. Aplikacja jest wyświetlana w Twojej domyślnej przeglądarce.
Ponieważ aplikacja używa zainstalowanej czcionki, aplikacja nie może działać w piaskownicy usługi App Service. Można go jednak wdrożyć przy użyciu kontenera systemu Windows, ponieważ można zainstalować czcionkę w kontenerze systemu Windows.
Skonfiguruj kontener systemu Windows
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt CustomFontSample i wybierz pozycję Dodaj>Obsługa orkiestracji kontenerów.
Wybierz pozycję Docker Compose>OK.
Projekt jest teraz ustawiony na uruchomienie w kontenerze systemu Windows. Element A Dockerfile jest dodawany do projektu CustomFontSample , a projekt docker-compose jest dodawany do rozwiązania.
W Eksploratorze rozwiązań otwórz plik Dockerfile.
Konieczne będzie użycie obsługiwanego obrazu nadrzędnego. Zmień obraz nadrzędny, zastępując wiersz FROM następującym kodem:
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019
Dodaj następujący wiersz na końcu pliku i zapisz plik:
RUN ${source:-obj/Docker/publish/InstallFont.ps1}
W projekcie CustomFontSample znajduje się plik InstallFont.ps1. Jest to prosty skrypt, który instaluje czcionkę. Bardziej złożoną wersję skryptu można znaleźć w Galeria programu PowerShell.
Uwaga
Aby przetestować kontener systemu Windows lokalnie, upewnij się, że platforma Docker jest uruchomiona na komputerze lokalnym.
Publikowanie w usłudze Azure Container Registry
Usługa Azure Container Registry może przechowywać obrazy na potrzeby wdrożeń kontenerów. Usługę App Service można skonfigurować tak, aby korzystała z obrazów hostowanych w usłudze Container Registry.
Otwórz okno Publikacja
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt CustomFontSample i wybierz pozycję Publikuj.
Utwórz i opublikuj rejestr
W oknie Publikowanie wybierz pozycję Azure, a następnie wybierz pozycję Dalej.
Wybierz pozycję Azure Container Registry, a następnie wybierz pozycję Dalej.
Wybierz subskrypcję, w której chcesz opublikować rejestr, a następnie wybierz pozycję Utwórz nowe.
Zaloguj się przy użyciu konta Azure
W oknie Azure Container Registry wybierz pozycję Dodaj konto, a następnie zaloguj się do subskrypcji platformy Azure. Jeśli już się zalogowałeś, wybierz konto zawierające odpowiednią subskrypcję z listy rozwijanej.
Skonfiguruj rejestr
Skonfiguruj nowy rejestr kontenerów przy użyciu sugerowanych wartości w poniższej tabeli jako przewodnik. Po zakończeniu wybierz pozycję Utwórz.
| Ustawienie | Sugerowana wartość |
|---|---|
| Prefiks DNS | Zachowaj wygenerowaną nazwę rejestru lub zmień ją na inną unikatową nazwę. |
| Grupa zasobów | Wybierz pozycję Nowy, wprowadź wartość myResourceGroup, a następnie wybierz przycisk OK. |
| SKU | Basic. Aby uzyskać więcej informacji, zobacz Warstwy cenowe. |
| Lokalizacja rejestru | Europa Zachodnia |
Wybierz Zakończ
Zostanie otwarte okno terminalu z wyświetlonym postępem wdrażania obrazu. Zaczekaj na zakończenie wdrażania.
Zaloguj się do platformy Azure
Zaloguj się do Azure portal.
Utwórz aplikację internetową
Wybierz pozycję Utwórz zasób, a następnie wybierz pozycję Utwórz w obszarze Aplikacja internetowa.
Podstawowa konfiguracja aplikacji
Na karcie Podstawy skonfiguruj ustawienia, korzystając z poniższej tabeli jako przewodnika.
| Ustawienie | Sugerowana wartość |
|---|---|
| Subskrypcja | Upewnij się, że wybrano prawidłową subskrypcję. |
| Grupa zasobów | Wybierz pozycję Utwórz nową, wprowadź myResourceGroup, a następnie wybierz przycisk OK. |
| Nazwa | Wprowadź unikatową nazwę. Adres URL aplikacji internetowej to https://<app-name>.azurewebsites.net, gdzie <app-name> to nazwa aplikacji. |
| Publikuj | Pojemnik |
| System operacyjny | Windows |
| Region | Europa Zachodnia |
| Plan systemu Windows | Wybierz pozycję Utwórz nową, wprowadź myAppServicePlan, a następnie wybierz przycisk OK. |
Zakładka Podstawowe powinna wyglądać podobnie do tej:
Konfigurowanie kontenera systemu Windows
Na karcie Kontener skonfiguruj niestandardowy kontener systemu Windows, jak pokazano w poniższej tabeli, a następnie wybierz pozycję Przejrzyj i utwórz.
| Ustawienie | Sugerowana wartość |
|---|---|
| Źródło obrazu | Azure Container Registry |
| Rejestr | Wybierz utworzony wcześniej rejestr. |
| Obraz | customfontsample |
| Tag | najnowsze |
Ukończ tworzenie aplikacji
Wybierz pozycję Utwórz i poczekaj na utworzenie wymaganych zasobów na platformie Azure.
Przejdź do aplikacji internetowej
Po zakończeniu wdrażania zostanie wyświetlony komunikat z powiadomieniem:
Wybierz pozycję Przejdź do zasobu.
Na stronie aplikacji wybierz link pod URL.
W przeglądarce zostanie otwarta następująca strona:
Poczekaj kilka minut, a następnie spróbuj ponownie, aż zobaczysz stronę główną z oczekiwaną czcionką:
Gratulacje! Przeprowadzono migrację aplikacji ASP.NET do usługi App Service w kontenerze systemu Windows.
Wyświetl dzienniki uruchamiania kontenera
Załadowanie kontenera systemu Windows może zająć trochę czasu. Aby wyświetlić postęp, przejdź do następującego adresu URL. (Zastąp <ciąg app-name> nazwą Twojej aplikacji).
https://<app-name>.scm.azurewebsites.net/api/logstream
Przesyłane strumieniowo dzienniki wyglądają następująco:
14/09/2018 23:16:19.889 INFO - Site: fonts-win-container - Creating container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest.
14/09/2018 23:16:19.928 INFO - Site: fonts-win-container - Create container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest succeeded. Container Id 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:23.405 INFO - Site: fonts-win-container - Start container succeeded. Container: 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Configuring container
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container start-up and configuration completed successfully
Usługa Azure App Service używa technologii kontenera platformy Docker do hostowania zarówno wbudowanych obrazów, jak i obrazów niestandardowych. Aby wyświetlić listę wbudowanych obrazów, uruchom polecenie interfejsu wiersza polecenia platformy Azure, az webapp list-runtimes --os linux. Jeśli te obrazy nie spełniają Twoich potrzeb, możesz skompilować i wdrożyć obraz niestandardowy.
Uwaga
Kontener powinien być przeznaczony dla architektury x86-64. ARM64 nie jest obsługiwane.
W tym samouczku dowiesz się, jak:
- Wypchnij niestandardowy obraz platformy Docker do usługi Azure Container Registry.
- Wdróż obraz niestandardowy w usłudze App Service.
- Skonfiguruj zmienne środowiskowe.
- Zaimportuj obraz kontenera do usługi App Service przy użyciu tożsamości zarządzanej.
- Uzyskaj dostęp do dzienników diagnostycznych.
- Włącz CI/CD z rejestru kontenerów do usługi App Service.
- Nawiąż połączenie z kontenerem przy użyciu protokołu SSH.
Ukończenie tego samouczka spowoduje naliczenie niewielkiej opłaty na koncie platformy Azure dla rejestru kontenerów i może spowodować naliczenie większej liczby kosztów w przypadku hostowania kontenera dłużej niż miesiąc.
Skonfiguruj początkowe środowisko
Ten samouczek wymaga wersji 2.0.80 lub nowszej interfejsu wiersza polecenia platformy Azure. Jeśli używasz usługi Azure Cloud Shell, najnowsza wersja jest już zainstalowana.
- Upewnij się, że masz konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Get started with Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne Azure CLI lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Uwierzytelnianie na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Używanie rozszerzeń i zarządzanie nimi za pomocą interfejsu wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowaną wersję i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
- Zainstaluj Docker, który służy do budowania obrazów Docker. Zainstalowanie platformy Docker może wymagać ponownego uruchomienia komputera.
Po zainstalowaniu platformy Docker otwórz okno terminalu i sprawdź, czy platforma Docker jest zainstalowana:
docker --version
Klonowanie lub pobieranie przykładowej aplikacji
Przykładowe pliki do tego samouczka można uzyskać za pomocą polecenia git clone lub pobierając je.
Sklonuj repozytorium przy użyciu Git Bash
Sklonuj przykładowe repozytorium:
git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input
Upewnij się, że argument --config core.autocrlf=input jest uwzględniany w celu zagwarantowania prawidłowych zakończeń wierszy w plikach używanych w kontenerze systemu Linux.
Następnie przejdź do folderu:
cd docker-django-webapp-linux
Pobierz plik ZIP z GitHub
Zamiast korzystać z klonowania Git, możesz przejść do https://github.com/Azure-Samples/docker-django-webapp-linux strony i wybrać pozycję Code>Local>Download ZIP.
Rozpakuj plik ZIP do folderu o nazwie docker-django-webapp-linux.
Następnie otwórz okno terminalu w folderze docker-django-webapp-linux .
Przygotuj pojemnik na próbkę
Nowszy terminal przeglądarkowy i az webapp exec zapewniają uwierzytelniony dostęp do uruchomionych kontenerów Linuksa bez potrzeby serwera SSH lub wbudowanego w obraz hasła SSH. Starszy (legacyjny) Kudu WebSSH i az webapp ssh dostęp mogą nadal wymagać serwera SSH. Repozytorium przykładowe zawiera starsze konfiguracje SSH. Przed zbudowaniem zastąp zawartość Dockerfile następującą konfiguracją wyłącznie dla aplikacji:
FROM tiangolo/uwsgi-nginx-flask:python3.6
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt --no-cache-dir
ADD . /code/
COPY init.sh /usr/local/bin/
RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000
ENTRYPOINT ["init.sh"]
Zamień zawartość init.sh następującym skryptem, zachowując końcówki linii Linuksa:
#!/bin/bash
set -e
exec python /code/manage.py runserver 0.0.0.0:8000
Usuń stary plik sshd_config z lokalnego folderu próbek, żeby ADD . /code/ nie kopiował go do obrazu.
Dockerfile instaluje zależności aplikacji, kopiuje aplikację i skrypt startowy oraz udostępnia port aplikacji. Entrypoint uruchamia tylko aplikację Python. Zmiany te usuwają z próbki instalację SSH i dane poświadczenia. Obraz zawiera /bin/bash dla nowszego terminala przeglądarki oraz domyślną az webapp exec powłokę.
Zbuduj i przetestuj obraz lokalnie
Notatka
Usługa Docker Hub nakłada limity dotyczące liczby anonimowych pobrań na adres IP i liczby uwierzytelnionych pobrań na bezpłatnego użytkownika. Jeśli zauważysz, że ściąganie z usługi Docker Hub jest ograniczone, spróbuj uruchomić polecenie docker login, jeśli nie jesteś jeszcze zalogowany.
Uruchom następujące polecenie, aby zbudować obraz:
docker build --tag appsvc-tutorial-custom-image .Przetestuj, czy kompilacja działa, uruchamiając kontener platformy Docker lokalnie:
docker run -it -p 8000:8000 appsvc-tutorial-custom-imageTo
docker runpolecenie określa port przy użyciu argumentu-pi zawiera nazwę obrazu.-itpozwala go zatrzymać za pomocą Ctrl+C.Napiwek
Jeśli korzystasz z systemu Windows i widzisz błąd *standard_init_linux.go:211: exec user process caused "no such file or directory", plik init.sh zawiera zakończenia wiersza CRLF zamiast oczekiwanych zakończeń LF. Ten błąd występuje, jeśli użyto narzędzia Git do sklonowania przykładowego repozytorium, ale pominięto
--config core.autocrlf=inputparametr . W takim przypadku ponownie sklonuj repozytorium za pomocą argumentu--config. Jeśli edytowano init.sh i zapisano go z zakończeniami CRLF, może również zostać wyświetlony błąd. W takim przypadku zapisz plik ponownie wyłącznie z zakończeniami LF.Przejdź do
http://localhost:8000, aby sprawdzić, czy aplikacja internetowa i kontener działają prawidłowo.
Utwórz tożsamość zarządzaną przypisaną przez użytkownika
Usługa App Service może używać domyślnej tożsamości zarządzanej lub tożsamości zarządzanej przypisanej przez użytkownika do uwierzytelniania w rejestrze kontenerów. W tym samouczku użyjesz tożsamości zarządzanej przypisanej przez użytkownika.
Uruchom polecenie az group create, aby utworzyć grupę zasobów:
az group create --name msdocs-custom-container-tutorial --location westeuropeMożesz zmienić wartość
--location, aby określić region w pobliżu Ciebie.Utwórz tożsamość zarządzaną w grupie zasobów:
az identity create --name myID --resource-group msdocs-custom-container-tutorial
Utwórz rejestr kontenerów
Utwórz rejestr kontenerów przy użyciu następującego
az acr createpolecenia. Zastąp wartość<registry-name>unikatową nazwą rejestru. Nazwa musi zawierać tylko litery i cyfry i musi być unikatowa na całej platformie Azure.az acr create --name <registry-name> --resource-group msdocs-custom-container-tutorial --sku Basic --admin-enabled trueParametr
--admin-enabledumożliwia wypychanie obrazów kontenerów do rejestru przy użyciu poświadczeń administracyjnych.Pobierz administracyjne dane uwierzytelniające, uruchamiając polecenie
az credential acr show:az acr credential show --resource-group msdocs-custom-container-tutorial --name <registry-name>Dane wyjściowe JSON tego polecenia zawierają dwa hasła wraz z nazwą użytkownika rejestru.
Wypchnij przykładowy obraz do usługi Container Registry
W tej sekcji wypchniesz obraz kontenera do usługi Container Registry, która jest później używana przez usługę App Service.
Z lokalnego terminalu, w którym utworzyłeś przykładowy obraz, użyj polecenia
docker login, aby zalogować się do rejestru kontenerów:docker login <registry-name>.azurecr.io --username <registry-username>Zastąp
<registry-name>i<registry-username>wartościami z poprzednich kroków. Po wyświetleniu monitu wpisz jedno z haseł z poprzedniej sekcji.Użyj tej samej nazwy rejestru we wszystkich pozostałych krokach tej sekcji.
Po pomyślnym zalogowaniu należy otagować lokalny obraz Docker dla rejestru:
docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestUżyj polecenia
docker push, aby wypchnąć obraz do rejestru obrazów:docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestPrzesyłanie obrazu po raz pierwszy może potrwać kilka minut, ponieważ obraz zawiera obraz podstawowy. Kolejne przesyłania są zwykle szybsze.
Czekając, możesz wykonać kroki opisane w następnej sekcji, aby skonfigurować usługę App Service do wdrożenia z rejestru.
Autoryzuj tożsamość zarządzaną dla rejestru
Utworzona tożsamość zarządzana nie ma jeszcze autoryzacji do ściągania z rejestru kontenerów. W tym kroku włączysz autoryzację.
Pobierz identyfikator jednostki głównej dla tożsamości zarządzanej:
principalId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query principalId --output tsv)Pobierz identyfikator zasobu dla rejestru kontenerów:
registryId=$(az acr show --resource-group msdocs-custom-container-tutorial --name <registry-name> --query id --output tsv)Udziel tożsamości zarządzanej uprawnienia dostępu do rejestru kontenerów:
az role assignment create --assignee $principalId --scope $registryId --role "AcrPull"Aby uzyskać więcej informacji na temat tych uprawnień, zobacz Co to jest kontrola dostępu oparta na rolach platformy Azure?.
Utwórz aplikację internetową
Utwórz plan usługi App Service przy użyciu
az appservice plan createpolecenia :az appservice plan create --name myAppServicePlan --resource-group msdocs-custom-container-tutorial --is-linuxPlan usługi App Service odpowiada maszynie wirtualnej, która hostuje aplikację internetową. Domyślnie poprzednie polecenie używa niedrogiej warstwy cenowej B1, która jest bezpłatna przez pierwszy miesiąc. Warstwę można określić przy użyciu parametru
--sku.Utwórz aplikację internetową za
az webapp createpomocą polecenia :az webapp create --resource-group msdocs-custom-container-tutorial --plan myAppServicePlan --name <app-name> --deployment-container-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestZastąp
<app-name>nazwą aplikacji internetowej. Nazwa musi być unikatowa na platformie Azure. Również zastąp<registry-name>nazwą rejestru z poprzedniej sekcji.Napiwek
Ustawienia kontenera aplikacji internetowej można pobrać w dowolnym momencie za pomocą polecenia
az webapp config container show --name <app-name> --resource-group msdocs-custom-container-tutorial. Obraz jest określony we właściwościDOCKER_CUSTOM_IMAGE_NAME. Po wdrożeniu aplikacji internetowej za pomocą szablonów usługi Azure DevOps lub Azure Resource Manager obraz może się również pojawić we właściwości o nazwieLinuxFxVersion. Obie właściwości mają ten sam cel. Jeśli obie są obecne w konfiguracji aplikacji internetowej,LinuxFxVersionma pierwszeństwo.
Konfigurowanie aplikacji internetowej
W tym kroku skonfigurujesz aplikację internetową w następujący sposób:
- Skonfiguruj aplikację do wysyłania żądań do portu 8000. Przykładowy kontener nasłuchuje na porcie 8000 dla żądań internetowych.
- Skonfiguruj aplikację tak, aby używała tożsamości zarządzanej do ściągania obrazów z rejestru kontenerów.
- Skonfiguruj ciągłe wdrażanie z rejestru kontenerów. (Każde wypchnięcie obrazu do rejestru spowoduje, że aplikacja pobierze nowy obraz). Ten krok nie jest wymagany do skonfigurowania aplikacji internetowej do pobierania z rejestru kontenerów, ale może powiadomić aplikację internetową, gdy nowy obraz zostanie wypchnięty do rejestru. Jeśli nie wykonasz tego kroku, musisz ręcznie wywołać pobranie obrazu, uruchamiając ponownie aplikację internetową.
Użyj
az webapp config appsettings setpolecenia , aby ustawić zmiennąWEBSITES_PORTśrodowiskową zgodnie z oczekiwaniami w kodzie aplikacji:az webapp config appsettings set --resource-group msdocs-custom-container-tutorial --name <app-name> --settings WEBSITES_PORT=8000Zastąp
<app-name>nazwą użytą w poprzednim kroku.Włącz tożsamość zarządzaną przypisaną przez użytkownika w aplikacji internetowej przy użyciu
az webapp identity assignpolecenia :id=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query id --output tsv) az webapp identity assign --resource-group msdocs-custom-container-tutorial --name <app-name> --identities $idZastąp
<app-name>nazwą użytą w poprzednim kroku.Skonfiguruj aplikację do ściągania z usługi Container Registry przy użyciu tożsamości zarządzanych.
appConfig=$(az webapp config show --resource-group msdocs-custom-container-tutorial --name <app-name> --query id --output tsv) az resource update --ids $appConfig --set properties.acrUseManagedIdentityCreds=TrueZastąp
<app-name>nazwą użytą w poprzednim kroku.Ustaw identyfikator klienta używany przez aplikację internetową do pobierania z usługi Container Registry. Ten krok nie jest wymagany, jeśli używasz tożsamości zarządzanej przypisanej przez system.
clientId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query clientId --output tsv) az resource update --ids $appConfig --set properties.AcrUserManagedIdentityID=$clientIdWłącz ciągłą integrację/ciągłe wdrażanie w usłudze App Service.
cicdUrl=$(az webapp deployment container config --enable-cd true --name <app-name> --resource-group msdocs-custom-container-tutorial --query CI_CD_URL --output tsv)CI_CD_URLto adres URL generowany przez usługę App Service. Rejestr powinien użyć tego adresu URL, aby powiadomić usługę App Service o przesłaniu obrazu. To w rzeczywistości nie tworzy webhooka za Ciebie.Utwórz webhook w rejestrze kontenerów. Użyj CI_CD_URL otrzymanego w poprzednim kroku.
az acr webhook create --name appserviceCD --registry <registry-name> --uri $cicdUrl --actions push --scope appsvc-tutorial-custom-image:latestAby sprawdzić, czy element webhook jest prawidłowo skonfigurowany, wyślij polecenie ping do elementu webhook i sprawdź, czy otrzymasz odpowiedź 200 OK.
eventId=$(az acr webhook ping --name appserviceCD --registry <registry-name> --query id --output tsv) az acr webhook list-events --name appserviceCD --registry <registry-name> --query "[?id=='$eventId'].eventResponseMessage"Napiwek
Aby wyświetlić wszystkie informacje o wszystkich zdarzeniach webhooka, usuń parametr
--query.Jeśli śledzisz log kontenera, powinien zostać wyświetlony komunikat
Starting container for sitepo pingu webhooka, ponieważ webhook wyzwoli ponowne uruchomienie aplikacji.
Przejdź do aplikacji internetowej
Aby przetestować aplikację, przejdź do https://<app-name>.azurewebsites.netstrony . Zastąp ciąg <app-name> nazwą swojej aplikacji internetowej.
Przy pierwszej próbie uzyskania dostępu do aplikacji może upłynąć trochę czasu, zanim aplikacja zacznie odpowiadać, ponieważ usługa App Service musi ściągnąć cały obraz z rejestru. Jeśli przeglądarka przekroczy limit czasu, po prostu odśwież stronę. Po ściągnięciu pierwszego obrazu kolejne testy będą działać znacznie szybciej.
Uzyskaj dostęp do dzienników diagnostycznych
Podczas oczekiwania na ściągnięcie obrazu przez usługę App Service warto dokładnie sprawdzić, co robi usługa App Service, przesyłając strumieniowo dzienniki kontenera do terminalu.
Włącz rejestrowanie kontenerów:
az webapp log config --name <app-name> --resource-group msdocs-custom-container-tutorial --docker-container-logging filesystemWłącz strumień dziennika:
az webapp log tail --name <app-name> --resource-group msdocs-custom-container-tutorialJeśli nie widzisz dzienników konsoli, sprawdź ponownie w ciągu 30 sekund.
Możesz również sprawdzić pliki dziennika z przeglądarki, przechodząc do strony
https://<app-name>.scm.azurewebsites.net/api/logs/docker.Aby zatrzymać przesyłanie strumieniowe dzienników w dowolnym momencie, wybierz Ctrl+C.
Zmodyfikuj kod aplikacji i wdroż ją ponownie
W tej sekcji wprowadzisz zmianę w kodzie aplikacji internetowej, ponownie skompilujesz obraz, a następnie wypchniesz go do rejestru kontenerów. Następnie usługa App Service automatycznie ściąga zaktualizowany obraz z rejestru w celu zaktualizowania uruchomionej aplikacji internetowej.
W lokalnym folderze docker-django-webapp-linux otwórz plik app/templates/app/index.html.
Zmień pierwszy element HTML, aby był zgodny z poniższym kodem.
<nav class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <a class="navbar-brand" href="#">Azure App Service - Updated Here!</a> </div> </div> </nav>Zapisz swoje zmiany.
Przejdź do folderu docker-django-webapp-linux i ponownie zbuduj obraz:
docker build --tag appsvc-tutorial-custom-image .Zaktualizuj znacznik obrazu do
latest:docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestZastąp ciąg
<registry-name>nazwą Twojego registry.Wyślij obraz do rejestru:
docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestPo zakończeniu push obrazu element webhook powiadamia usługę App Service o push obrazu, a usługa App Service próbuje pobrać zaktualizowany obraz. Zaczekaj kilka minut, a następnie sprawdź, czy aktualizacja została wdrożona, przechodząc do strony
https://<app-name>.azurewebsites.net.
Połącz się z kontenerem przy użyciu SSH
Gdy kontener działa, możesz uzyskać do niego dostęp przez uwierzytelniony serwer proxy Kudu usługi App Service, korzystając z nowszego terminala przeglądarki lub az webapp exec. Nie musisz instalować ani uruchamiać serwera SSH w obrazie dla tych opcji.
Informacje o wymaganiach wstępnych dotyczących dostępu oraz o kontrolkach aplikacji lub slotu można znaleźć tutaj: Otwórz powłokę kontenera (SSH) i uruchom polecenia.
Otwórz połączenie SSH do kontenera
Użyj Azure CLI 2.90.0 lub nowszej i zaloguj się do swojego konta Azure. Otwórz interaktywną powłokę w lokalnym terminalu za pomocą polecenia preview
az webapp exec:az webapp exec --resource-group msdocs-custom-container-tutorial --name <app-name>Przeanalizuj procesy działające w aplikacji, używając
top, jeśli jest dostępne w obrazie systemu.
Aby uruchamiać polecenia w trybie odłączonym zamiast w sesji interaktywnej, zobacz Uruchamianie poleceń bez sesji interaktywnej. Akceptacja żądania nie potwierdza, że polecenie zostało pomyślnie wykonane.
Wyczyść zasoby
Zasoby utworzone w tym artykule mogą wiązać się z bieżącymi kosztami. Aby wyczyścić zasoby, musisz usunąć tylko grupę zasobów, która je zawiera:
az group delete --name msdocs-custom-container-tutorial
Następne kroki
Czego się nauczyłeś/aś:
- Wdróż obraz niestandardowy do prywatnego rejestru kontenerów.
- Wdróż obraz niestandardowy do usługi App Service.
- Zaktualizuj i ponownie wdróż obraz systemu.
- Uzyskaj dostęp do dzienników diagnostycznych.
- Nawiąż połączenie z kontenerem przy użyciu protokołu SSH.
- Wypchnij niestandardowy obraz Docker do usługi Container Registry.
- Wdróż obraz niestandardowy w usłudze App Service.
- Skonfiguruj zmienne środowiskowe.
- Zaimportuj obraz kontenera do usługi App Service przy użyciu tożsamości zarządzanej.
- Uzyskaj dostęp do dzienników diagnostycznych.
- Włącz ciągłą integrację/ciągłe wdrażanie z rejestru kontenerów do usługi App Service.
- Nawiąż połączenie z kontenerem przy użyciu protokołu SSH.
Przejdź do następnego samouczka:
Możesz też zapoznać się z innymi zasobami: