Migrowanie oprogramowania niestandardowego do usługi aplikacja systemu Azure przy użyciu kontenera niestandardowego
usługa aplikacja systemu Azure udostępnia wstępnie zdefiniowane stosy aplikacji, takie jak ASP.NET lub Node.js w systemie Windows. Te stosy aplikacji działają w usługach IIS. Wstępnie skonfigurowane środowisko systemu Windows blokuje system operacyjny z:
- 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 aplikacja systemu Azure.
Możesz wdrożyć niestandardowy obraz systemu Windows z programu Visual Studio, aby wprowadzić zmiany systemu operacyjnego wymagane przez aplikację. Dzięki temu można łatwo migrować aplikację lokalną, 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
W celu ukończenia tego samouczka:
- Utwórz konto usługi Docker Hub.
- Zainstaluj program Docker for Windows.
- Skonfiguruj platformę Docker do uruchamiania kontenerów systemu Windows.
- Zainstaluj program Visual Studio 2022 przy użyciu obciążeń 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 pozycję Sprawdzanie dostępności aktualizacji w Pomocy>.
- Dodaj obciążenia w programie Visual Studio, wybierając pozycję Narzędzia Pobierz narzędzia>i funkcje.
Lokalne konfigurowanie aplikacji
Pobierz przykład
Ten krok umożliwia skonfigurowanie lokalnego projektu platformy .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.
Instalowanie czcionki
W Eksploratorze Windows przejdź do folderu custom-font-win-container-master/CustomFontSample, kliknij prawym przyciskiem myszy plik FrederickatheGreat Regular.ttf i wybierz pozycję 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 zostanie wyświetlona w domyślnej przeglądarce.
Ponieważ aplikacja używa zainstalowanej czcionki, aplikacja nie może działać w piaskownicy usługi App Service. Aplikację tę można jednak wdrożyć za pomocą kontenera systemu Windows, ponieważ można w nim zainstalować wymaganą czcionkę.
Konfigurowanie kontenera systemu Windows
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt CustomFontSample i wybierz pozycję Dodaj>Obsługa aranżacji 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
Na końcu pliku dodaj następujący wiersz, a następnie 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 Azure Container Registry.
Otwieranie kreatora publikowania
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt CustomFontSample i wybierz polecenie Publikuj.
Tworzenie i publikowanie rejestru
W kreatorze publikacji wybierz kolejno pozycje Container Registry>Utwórz nowy rejestr Azure Container Registry>Publikuj.
Logowanie się przy użyciu konta platformy Azure
W oknie dialogowym Tworzenie nowego rejestru kontenerów platformy Azure wybierz pozycję Dodaj konto, a następnie zaloguj się do subskrypcji platformy Azure. Po zalogowaniu wybierz z listy rozwijanej konto zawierające odpowiednią subskrypcję.
Konfigurowanie rejestru
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, wpisz myResourceGroup i wybierz przycisk OK. |
SKU | Basic. Aby uzyskać więcej informacji, zobacz Warstwy cenowe. |
Lokalizacja rejestru | Europa Zachodnia |
Zostanie otwarte okno terminalu z wyświetlonym postępem wdrażania obrazu. Zaczekaj na zakończenie wdrażania.
Logowanie się do platformy Azure
Zaloguj się w witrynie Azure Portal.
Tworzenie aplikacji internetowej
Z menu po lewej stronie wybierz kolejno pozycje Utwórz zasób>Internet>Web App for Containers.
Konfigurowanie podstaw aplikacji
Na karcie Podstawowe skonfiguruj ustawienia zgodnie z poniższą tabelą. Następnie wybierz pozycję Dalej: Platforma Docker.
Ustawienie | Sugerowana wartość |
---|---|
Subskrypcja | Upewnij się, że wybrano prawidłową subskrypcję. |
Grupa zasobów | wybierz pozycję Utwórz nową, wpisz myResourceGroup, a następnie wybierz przycisk OK. |
Nazwa/nazwisko | Wpisz unikatową nazwę. Adres URL aplikacji internetowej to https://<app-name>.azurewebsites.net , gdzie <app-name> to nazwa aplikacji. |
Publikowanie | Kontener platformy Docker |
System operacyjny | Windows |
Region | Europa Zachodnia |
Plan systemu Windows | Wybierz pozycję Utwórz nową, wpisz myAppServicePlan i wybierz przycisk OK. |
Karta Podstawowe powinna wyglądać następująco:
Konfigurowanie kontenera systemu Windows
Na karcie Docker 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 | Rejestr kontenerów platformy Azure |
Rejestr | Wybierz utworzony wcześniej rejestr. |
Obraz | customfontsample |
Tag | latest |
Kończenie tworzenia aplikacji
Wybierz pozycję Utwórz i poczekaj na utworzenie wymaganych zasobów na platformie Azure.
Przechodzenie do aplikacji internetowej
Po zakończeniu wdrażania zostanie wyświetlone pole powiadomienia.
Wybierz pozycję Przejdź do zasobu.
Na stronie aplikacji wybierz link pod adresem URL.
W przeglądarce zostanie otwarta następująca strona:
Poczekaj kilka minut i spróbuj ponownie, dopóki nie uzyskasz strony głównej z oczekiwaną czcionką:
Gratulacje! Przeprowadzono migrację aplikacji ASP.NET do usługi Azure App Service w kontenerze systemu Windows.
Wyświetlanie dzienników 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ą 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 aplikacja systemu Azure 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. Usługa ARM64 nie jest obsługiwana.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Wypychanie niestandardowego obrazu platformy Docker do usługi Azure Container Registry.
- Wdróż obraz niestandardowy w usłudze App Service.
- Konfigurowanie zmiennych środowiskowych.
- Pobierz obraz do usługi App Service przy użyciu tożsamości zarządzanej.
- Uzyskiwanie dostępu do dzienników diagnostycznych.
- Włącz ciągłą integrację/ciągłe wdrażanie z usługi Azure Container Registry 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 przez dłuższy niż miesiąc.
Konfigurowanie środowiska początkowego
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.
- Posiadanie konta 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 Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia 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 Logowanie się 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 Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
- Zainstaluj platformę Docker, która służy do kompilowania obrazów platformy 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ład dla tego samouczka można uzyskać za pośrednictwem klonowania lub pobierania narzędzia Git.
Klonowanie za pomocą usługi Git
Sklonuj przykładowe repozytorium:
git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input
Upewnij się, że argument jest uwzględniany w celu zagwarantowania --config core.autocrlf=input
prawidłowych zakończeń wierszy w plikach używanych w kontenerze systemu Linux.
Następnie przejdź do folderu:
cd docker-django-webapp-linux
Pobieranie z witryny GitHub
Zamiast używać polecenia git clone, możesz odwiedzić https://github.com/Azure-Samples/docker-django-webapp-linux stronę i wybrać pozycję Kod>lokalny>pobierz plik ZIP.
Rozpakuj plik ZIP do folderu o nazwie docker-django-webapp-linux.
Następnie otwórz okno terminalu w folderze docker-django-webapp-linux .
(Opcjonalnie) Badanie pliku platformy Docker
Jest to plik w przykładzie o nazwie Dockerfile. Opisuje on obraz platformy Docker i zawiera instrukcje konfiguracji.
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/
# ssh
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
&& apt-get install -y --no-install-recommends dialog \
&& apt-get update \
&& apt-get install -y --no-install-recommends openssh-server \
&& echo "$SSH_PASSWD" | chpasswd
COPY sshd_config /etc/ssh/
COPY init.sh /usr/local/bin/
RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000 2222
#CMD ["python", "/code/manage.py", "runserver", "0.0.0.0:8000"]
ENTRYPOINT ["init.sh"]
- Pierwsza grupa poleceń instaluje wymagania aplikacji w środowisku.
- Druga grupa poleceń tworzy serwer SSH, aby zapewnić lepszą komunikację z zabezpieczeniami między kontenerem a hostem.
- Ostatni wiersz wywołuje
init.sh
polecenie ,ENTRYPOINT ["init.sh"]
aby uruchomić usługę SSH i serwer języka Python.
Kompilowanie i testowanie obrazu lokalnie
Uwaga
Usługa Docker Hub ma limity przydziału liczby anonimowych ściągnięcia na adres IP i liczbę uwierzytelnionych ściągnięcia na bezpłatnego użytkownika. Jeśli zauważysz, że ściąganie z usługi Docker Hub jest ograniczone, spróbuj docker login
, jeśli jeszcze nie zalogowano się.
Uruchom następujące polecenie, aby skompilować 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-image
To
docker run
polecenie określa port z argumentem-p
i zawiera nazwę obrazu.-it
umożliwia zatrzymanie go za pomocą Ctrl+C.Napiwek
Jeśli korzystasz z systemu Windows i widzisz błąd standard_init_linux.go:211: proces użytkownika exec spowodował "brak takiego pliku lub katalogu", 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=input
parametr . 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 z zakończeniami LF.Przejdź do witryny , aby
http://localhost:8000
sprawdzić, czy aplikacja internetowa i kontener działają prawidłowo.
I. Tworzenie tożsamości zarządzanej przypisanej 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 westeurope
Możesz zmienić wartość,
--location
aby określić region w pobliżu.Utwórz tożsamość zarządzaną w grupie zasobów:
az identity create --name myID --resource-group msdocs-custom-container-tutorial
II. Tworzenie rejestru kontenerów
Utwórz rejestr kontenerów przy użyciu następującego
az acr create
polecenia. 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 true
Parametr
--admin-enabled
umożliwia wypychanie obrazów do rejestru przy użyciu poświadczeń administracyjnych.Pobierz poświadczenia administracyjne, uruchamiając
az credential acr show
polecenie :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.
III. Wypychanie przykładowego obrazu do usługi Azure Container Registry
W tej sekcji wypchniesz obraz do usługi Azure Container Registry, który będzie używany później przez usługę App Service.
Z lokalnego terminalu, w którym utworzono przykładowy obraz, użyj
docker login
polecenia , aby zalogować się do rejestru kontenerów:docker login <registry-name>.azurecr.io --username <registry-username>
Zastąp
<registry-name>
wartości i<registry-username>
wartościami z poprzednich kroków. Po wyświetleniu monitu wpisz jedno z haseł z poprzedniej sekcji.Ta sama nazwa rejestru jest używana we wszystkich pozostałych krokach tej sekcji.
Po pomyślnym zalogowaniu należy oznaczyć lokalny obraz platformy Docker w rejestrze:
docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
Użyj polecenia ,
docker push
aby wypchnąć obraz do rejestru:docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
Przekazywanie obrazu po raz pierwszy może potrwać kilka minut, ponieważ zawiera obraz podstawowy. Kolejne przekazywanie jest zwykle szybsze.
Czekając, możesz wykonać kroki opisane w następnej sekcji, aby skonfigurować usługę App Service do wdrożenia z rejestru.
IV. Autoryzowanie tożsamości zarządzanej 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 podmiotu zabezpieczeń 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?.
V. Tworzenie aplikacji internetowej
Utwórz plan usługi App Service przy użyciu
az appservice plan create
polecenia :az appservice plan create --name myAppServicePlan --resource-group msdocs-custom-container-tutorial --is-linux
Plan 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 create
pomocą 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:latest
Zastąp
<app-name>
ciąg nazwą aplikacji internetowej. Nazwa musi być unikatowa na platformie Azure. Zastąp<registry-name>
również 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 być również wyświetlany 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,LinuxFxVersion
ma pierwszeństwo.
VI. 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.
- Poinformuj aplikację, 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 wypychanie obrazu do rejestru spowoduje wyzwolenie aplikacji w celu ściągnięcia nowego obrazu). Ta część nie jest wymagana, aby aplikacja internetowa ściągała z rejestru kontenerów, ale może poinformować aplikację internetową o wypchnięciu nowego obrazu do rejestru. Bez niego należy ręcznie wyzwolić ściąganie obrazu, uruchamiając ponownie aplikację internetową.
Użyj
az webapp config appsettings set
polecenia , 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=8000
Zastąp
<app-name>
ciąg nazwą użytą w poprzednim kroku.Włącz tożsamość zarządzaną przypisaną przez użytkownika w aplikacji internetowej za
az webapp identity assign
pomocą polecenia :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 $id
Zastąp
<app-name>
ciąg nazwą użytą w poprzednim kroku.Skonfiguruj aplikację do ściągania z usługi Azure 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=True
Zastąp
<app-name>
ciąg nazwą użytą w poprzednim kroku.Ustaw identyfikator klienta używany przez aplikację internetową do ściągnięcia z usługi Azure 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=$clientId
Włą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_URL
to adres URL generowany przez usługę App Service. Rejestr powinien użyć tego adresu URL, aby powiadomić usługę App Service o wystąpieniu wypychania obrazu. Nie tworzy on elementu webhook.Utwórz element webhook w rejestrze kontenerów przy użyciu CI_CD_URL uzyskanych z ostatniego kroku.
az acr webhook create --name appserviceCD --registry <registry-name> --uri $cicdUrl --actions push --scope appsvc-tutorial-custom-image:latest
Aby 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 elementu webhook, usuń
--query
parametr .Jeśli przesyłasz strumieniowo dziennik kontenera, powinien zostać wyświetlony
Starting container for site
komunikat po ping elementu webhook, ponieważ element webhook wyzwoli ponowne uruchomienie aplikacji.
VII. Przechodzenie do aplikacji internetowej
Aby przetestować aplikację, przejdź do https://<app-name>.azurewebsites.net
strony . 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, ponieważ usługa App Service musi ściągnąć cały obraz z rejestru. Jeśli upłynął limit czasu przeglądarki, po prostu odśwież stronę. Po ściągnięciu obrazu początkowego kolejne testy będą działać znacznie szybciej.
VIII. Uzyskiwanie dostępu 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 filesystem
Włącz strumień dziennika:
az webapp log tail --name <app-name> --resource-group msdocs-custom-container-tutorial
Jeśli nie widzisz dzienników konsoli, sprawdź ponownie w ciągu 30 sekund.
Pliki dzienników można także sprawdzać w przeglądarce pod adresem
https://<app-name>.scm.azurewebsites.net/api/logs/docker
.Aby zatrzymać przesyłanie strumieniowe dzienników w dowolnym momencie, wybierz Ctrl+C.
IX. Modyfikowanie kodu aplikacji i ponowne wdrażanie
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 zmiany.
Przejdź do folderu docker-django-webapp-linux i ponownie skompiluj obraz:
docker build --tag appsvc-tutorial-custom-image .
Zaktualizuj tag obrazu na :
latest
docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
Zastąp ciąg
<registry-name>
nazwą rejestru.Wypchnij obraz do rejestru:
docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
Po zakończeniu wypychania obrazu element webhook powiadamia usługę App Service o wypchnięciu, a usługa App Service próbuje ściągnąć zaktualizowany obraz. Zaczekaj kilka minut, a następnie sprawdź, czy aktualizacja została wdrożona, przechodząc do
https://<app-name>.azurewebsites.net
strony .
X. Nawiązywanie połączenia z kontenerem przy użyciu protokołu SSH
Protokół SSH umożliwia ulepszoną komunikację z zabezpieczeniami między kontenerem a klientem. Aby włączyć połączenie SSH z kontenerem, należy skonfigurować dla niego niestandardowy obraz. Po uruchomieniu kontenera można otworzyć połączenie SSH.
Konfigurowanie kontenera dla protokołu SSH
Przykładowa aplikacja używana w tym samouczku ma już niezbędną konfigurację w pliku Dockerfile, która instaluje serwer SSH, a także ustawia poświadczenia logowania. Ta sekcja jest tylko informacyjna. Aby nawiązać połączenie z kontenerem, przejdź do następnej sekcji.
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
&& apt-get install -y --no-install-recommends dialog \
&& apt-get update \
&& apt-get install -y --no-install-recommends openssh-server \
&& echo "$SSH_PASSWD" | chpasswd
Uwaga
Ta konfiguracja nie zezwala na połączenia zewnętrzne z kontenerem. Protokół SSH jest dostępny tylko za pośrednictwem witryny Kudu/SCM. Witryna Kudu/SCM jest uwierzytelniana przy użyciu konta platformy Azure.
root:Docker!
nie należy zmieniać w przypadku korzystania z protokołu SSH. SCM/KUDU będzie używać poświadczeń witryny Azure Portal. Zmiana tej wartości spowoduje błąd podczas korzystania z protokołu SSH.
Plik Dockerfile kopiuje również plik sshd_config do folderu /etc/ssh/ i uwidacznia port 2222 w kontenerze:
COPY sshd_config /etc/ssh/
# ...
EXPOSE 8000 2222
Port 2222 to port wewnętrzny dostępny tylko przez kontenery w sieci mostka prywatnej sieci wirtualnej.
Na koniec skrypt wejścia, init.sh, uruchamia serwer SSH.
#!/bin/bash
service ssh start
Otwieranie połączenia SSH z kontenerem
Przejdź do
https://<app-name>.scm.azurewebsites.net/webssh/host
strony i zaloguj się przy użyciu konta platformy Azure. Zastąp ciąg<app-name>
nazwą swojej aplikacji internetowej.Po zalogowaniu nastąpi przekierowanie do strony informacyjnej aplikacji internetowej. Wybierz pozycję SSH w górnej części strony, aby otworzyć powłokę i użyć poleceń.
Na przykład możesz zbadać procesy uruchomione w aplikacji przy użyciu
top
polecenia .
XI. Czyszczenie zasobów
Zasoby utworzone w tym artykule mogą wiązać się z bieżącymi kosztami. Aby wyczyścić zasoby, musisz usunąć tylko grupę zasobów zawierającą następujące elementy:
az group delete --name msdocs-custom-container-tutorial
Następne kroki
Które czynności umiesz wykonać:
- Wdróż obraz niestandardowy w prywatnym rejestrze kontenerów.
- Wdróż i obraz niestandardowy w usłudze App Service.
- Zaktualizuj i ponownie wdróż obraz.
- Uzyskiwanie dostępu do dzienników diagnostycznych.
- Nawiąż połączenie z kontenerem przy użyciu protokołu SSH.
- Wypychanie niestandardowego obrazu platformy Docker do usługi Azure Container Registry.
- Wdróż obraz niestandardowy w usłudze App Service.
- Konfigurowanie zmiennych środowiskowych.
- Pobierz obraz do usługi App Service przy użyciu tożsamości zarządzanej.
- Uzyskiwanie dostępu do dzienników diagnostycznych.
- Włącz ciągłą integrację/ciągłe wdrażanie z usługi Azure Container Registry do usługi App Service.
- Nawiąż połączenie z kontenerem przy użyciu protokołu SSH.
W następnym samouczku dowiesz się, jak zapewnić bezpieczeństwo aplikacji przy użyciu domeny niestandardowej i certyfikatu.
Możesz też zapoznać się z innymi zasobami: