Migrera anpassad programvara till Azure App Service en anpassad container
Azure App Service har fördefinierade programstackar i Windows som ASP.NET eller Node.js, som körs i IIS. Den förkonfigurerade Windows-miljön låser operativsystemet från administrativ åtkomst, programinstallationer, ändringar av den globala sammansättningscachen och så vidare (se Operativsystemfunktioner i Azure App Service). Men genom att använda en anpassad Windows-container i App Service kan du göra nödvändiga operativsystemändringar som appen behöver, vilket gör det enkelt att migrera en lokal app som kräver en anpassad operativsystem- och programvarukonfiguration. Den här kursen beskriver hur du migrerar en ASP.NET-app till App Service som använder anpassade teckensnitt som installeras i Windows-teckensnittsbiblioteket. Du distribuerar en Windows-avbildning med en anpassad konfiguration från Visual Studio till Azure Container Registry och kör den sedan i App Service.

Förutsättningar
För att slutföra den här kursen behöver du:
- Registrera dig för ett Docker Hub-konto
- Installera Docker för Windows.
- Växla Docker för att köra Windows-containrar.
- Installera Visual Studio 2019 med arbetsbelastningarna ASP.NET webbutveckling och Azure-utveckling. Om du redan har installerat Visual Studio 2019:
- Installera de senaste uppdateringarna i Visual Studio genom att klicka på Hjälp sök efter > uppdateringar.
- Lägg till arbetsbelastningarna i Visual Studio genom att klicka på Verktyg Hämta verktyg och > funktioner.
Konfigurera appen lokalt
Ladda ned exemplet
I det här steget konfigurerar du det lokala .NET-projektet.
- Ladda ned exempelprojektet.
- Extrahera (packa upp) filen custom-font-win-container.zip.
Exempelprojektet innehåller ett enkelt ASP.NET-program som använder ett anpassat teckensnitt som installeras i Windows-teckensnittsbiblioteket. Det är inte nödvändigt att installera teckensnitt, men det är ett exempel på en app som är integrerad med det underliggande operativsystemet. För att migrera den här typen av app till App Service måste du antingen omorganisera din kod för att ta bort integrationen eller migrera den som den är i en anpassad Windows-container.
Installera teckensnittet
I Utforskaren navigerar du till custom-font-win-container-master/CustomFontSample, högerklickar på FrederickatheGreat-Regular.ttf och väljer Installera.
Det här teckensnittet är offentligt tillgängligt från Google Fonts.
Kör appen
Öppna filen custom-font-win-container/CustomFontSample.sln i Visual Studio.
Skriv Ctrl+F5 för att köra appen utan felsökning. Appen visas i din standardwebbläsare.
Eftersom den använder ett installerat teckensnitt kan inte appen köras i sandbox-miljön för App Service. Du kan dock distribuera den med hjälp av en Windows-container i stället, eftersom du kan installera teckensnittet i Windows-containern.
Konfigurera Windows-containern
I Solution Explorer högerklickar du på projektet CustomFontSample och väljer Lägg till > Container Orchestration Support (Stöd för containerorkestrering).
Välj Docker Compose > OK.
Nu har projektet konfigurerats för att köra i en Windows-container. En Dockerfile läggs till i CustomFontSample-projektet och ett docker-compose-projekt läggs till i lösningen.
Från Solution Explorer öppnar du Dockerfile.
Du måste använda en överordnad avbildning som stöds. Ändra den överordnade avbildningen genom att ersätta raden FROM med följande kod:
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019
Lägg till följande rad i slutet av filen och spara filen:
RUN ${source:-obj/Docker/publish/InstallFont.ps1}
Du hittar InstallFont.ps1 i projektet CustomFontSample. Det är ett enkelt skript som installerar teckensnittet. Du hittar en mer komplex version av skriptet i Skriptcenter.
Anteckning
Om du vill Windows containern lokalt kontrollerar du att Docker har startats på den lokala datorn.
Publicera till Azure Container Registry
Azure Container Registry kan lagra dina avbildningar för containerdistribution. Du kan konfigurera App Service att använda avbildningar i Azure Container Registry.
Öppna publiceringsguiden
I Solution Explorer högerklickar du på projektet CustomFontSample och väljer Publicera.
Skapa register och publicera
I publiceringsguiden väljer du Container Registry > Skapa ny Azure Container Registry > Publicera.
Logga in med Azure-konto
I dialogrutan Create a new Azure Container Registry (Skapa nytt Azure-containerregister) väljer du Lägg till ett konto och loggar in till din Azure-prenumeration. Välj det konto som innehåller den önskade prenumerationen i listrutan om du redan är inloggad.

Konfigurera registret
Konfigurera det nya containerregistret baserat på de föreslagna värdena i tabellen nedan. Klicka på Skapa när du är klar.
| Inställning | Föreslaget värde | Mer information |
|---|---|---|
| DNS-prefix | Behåll det genererade registernamnet eller ändra det till ett annat unikt namn. | |
| Resursgrupp | Klicka på Nytt, skriv myResourceGroup och klicka på OK. | |
| SKU | Basic | Prisnivåer |
| Registerplats | Europa, västra |

Ett terminalfönster öppnas och visar förloppet för avbildningsdistributionen. Vänta tills distributionen har slutförts.
Logga in på Azure
Logga in på Azure Portal på https://portal.azure.com.
Skapa en webbapp
I den vänstra menyn väljer du Skapa en resurs > > webbapp Web App for Containers.
Konfigurera grunderna för appen
På fliken Grundläggande inställningar konfigurerar du inställningarna enligt följande tabell och klickar sedan på Nästa: Docker.
| Inställning | Föreslaget värde | Mer information |
|---|---|---|
| Prenumeration | Kontrollera att rätt prenumeration har valts. | |
| Resursgrupp | Välj Skapa ny, skriv myResourceGroup och klicka på OK. | |
| Namn | Skriv ett unikt namn. | Webbadressen till webbappen är https://<app-name>.azurewebsites.net, där <app-name> är appens namn. |
| Publicera | Docker-container | |
| Operativsystem | Windows | |
| Region | Europa, västra | |
| Windows-plan | Välj Skapa ny, skriv myAppServicePlan och klicka på OK. |
Fliken Grundläggande bör se ut så här:

Konfigurera Windows-containern
På fliken Docker konfigurerar du din anpassade Windows enligt följande tabell och väljer Granska + skapa.
| Inställning | Föreslaget värde |
|---|---|
| Bildkälla | Azure Container Register |
| Register | Välj det register som du skapade tidigare. |
| Bild | customfontsample |
| Tag | senaste |
Slutför appgenereringen
Klicka på Skapa och vänta på att Azure skapar resurserna som krävs.
Bläddra till webbappen
När Azure-åtgärden är klar visas ett meddelande.

Klicka på Gå till resurs.
På appsidan klickar du på länken under URL.
En ny webbläsarsida öppnas på följande sida:

Vänta några minuter och försök igen tills startsidan visas med det snygga teckensnitt du förväntar dig:

Grattis! Du har migrerat ett ASP.NET-program till Azure App Service i en Windows-container.
Se containerns startloggar
Det kan ta lite tid för Windows-containern att läsas in. Om du vill se förloppet går du till följande URL genom <app-name> att ersätta med namnet på din app.
https://<app-name>.scm.azurewebsites.net/api/logstream
De strömmade loggarna ser ut så här:
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
Azure App Service använder Docker-containertekniken som värd för både inbyggda avbildningar och anpassade avbildningar. Om du vill se en lista över inbyggda avbildningar kör du Azure CLI-kommandot az webapp list-runtimes --linux. Om avbildningarna inte uppfyller dina behov kan du skapa och distribuera en anpassad avbildning.
I den här guiden får du lära dig att:
- Push-skicka en anpassad Docker-avbildning till Azure Container Registry
- Distribuera den anpassade avbildningen till App Service
- Konfigurera miljövariabler
- Hämta avbildningen App Service en hanterad identitet
- Få åtkomst till diagnostikloggar
- Aktivera CI/CD från Azure Container Registry till App Service
- Anslut till containern med SSH
Den här självstudien medför en liten avgift på ditt Azure-konto för containerregistret och kan medföra ytterligare kostnader för att vara värd för containern längre än en månad.
Konfigurera din första miljö
- Ha ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- Installera Docker, som du använder för att skapa Docker-avbildningar. Installation av Docker kan kräva en omstart av datorn.
Använd bash-miljön i Azure Cloud Shell.
Om du vill kan du i stället installera Azure CLI för att köra CLI-referenskommandon.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Fler inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas till det installerar du Azure CLI-tillägg vid första användning. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
- Den här självstudien kräver version 2.0.80 eller senare av Azure CLI. Om du Azure Cloud Shell är den senaste versionen redan installerad.
När du har installerat Docker eller Azure Cloud Shell öppnar du ett terminalfönster och kontrollerar att Docker är installerat:
docker --version
Klona eller ladda ned exempelappen
Du kan hämta exemplet för den här självstudien via git-kloning eller nedladdning.
Klona med git
Klona exempeldatabasen:
git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input
Se till att inkludera --config core.autocrlf=input argumentet för att garantera korrekta radslut i filer som används i Linux-containern:
Gå sedan till den mappen:
cd docker-django-webapp-linux
Ladda ned från GitHub
I stället för att använda git-klonen kan https://github.com/Azure-Samples/docker-django-webapp-linux du gå till , välja Klona och sedan välja Ladda ned ZIP.
Packa upp ZIP-filen i en mapp med namnet docker-django-webapp-linux.
Öppna sedan ett terminalfönster i mappen docker-django-webapp-linux.
(Valfritt) Granska Docker-filen
Filen i exemplet med namnet Dockerfile som beskriver Docker-avbildningen och innehåller konfigurationsanvisningar:
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"]
- Den första gruppen med kommandon installerar appens krav i miljön.
- Den andra gruppen med kommandon skapar en SSH-server för säker kommunikation mellan containern och värden.
- Den sista
ENTRYPOINT ["init.sh"]raden, , anroparinit.shför att starta SSH-tjänsten och Python-servern.
Skapa och testa avbildningen lokalt
Anteckning
Docker Hub har kvoter för antalet anonyma pull-överföringar per IP-adress och antalet autentiserade pull-överföringar per kostnadsfri användare (se Dataöverföring ). Om du märker att pull-Docker Hub är begränsade kan du docker login prova om du inte redan är inloggad.
Kör följande kommando för att skapa avbildningen:
docker build --tag appsvc-tutorial-custom-image .Testa att bygget fungerar genom att köra Docker-containern lokalt:
docker run -it -p 8000:8000 appsvc-tutorial-custom-imageDet
docker runhär kommandot anger porten med argumentet följt av namnet på-pavbildningen.-itlåter dig stoppa den medCtrl+C.Tips
Om du kör på Windows och ser felet standard_init_linux.go:211: exec-användarprocessen orsakade "ingen sådan fil eller katalog" innehåller init.sh-filen CR-LF-radslut i stället för förväntade LF-slut. Det här felet inträffar om du använde git för att klona exempeldatabasen men utelämnade
--config core.autocrlf=inputparametern . I det här fallet klonar du lagringsplatsen igen med argumentet "--config". Du kan också se felet om du har redigerat init.sh sparat det med CRLF-slut. I det här fallet sparar du filen igen med endast LF-ändelse.Bläddra till
http://localhost:8000för att kontrollera att webbappen och containern fungerar korrekt.
Skapa en resursgrupp
I det här avsnittet och de som följer etablerar du resurser i Azure som du skickar avbildningen till och distribuerar sedan en container till Azure App Service. Du börjar med att skapa en resursgrupp där du samlar in alla dessa resurser.
Kör kommandot az group create för att skapa en resursgrupp:
az group create --name myResourceGroup --location westeurope
Du kan ändra värdet --location för att ange en region nära dig.
Push-skicka avbildningen till Azure Container Registry
I det här avsnittet push-installerar du avbildningen till Azure Container Registry där App Service kan distribuera den.
Kör kommandot
az acr createför att skapa en Azure Container Registry:az acr create --name <registry-name> --resource-group myResourceGroup --sku Basic --admin-enabled trueErsätt
<registry-name>med ett lämpligt namn för registret. Namnet får bara innehålla bokstäver och siffror och måste vara unikt i hela Azure.Kör kommandot
az acr showför att hämta autentiseringsuppgifter för registret:az acr credential show --resource-group myResourceGroup --name <registry-name>JSON-utdata för det här kommandot innehåller två lösenord tillsammans med registrets användarnamn.
Använd kommandot
docker loginför att logga in på containerregistret:docker login <registry-name>.azurecr.io --username <registry-username>Ersätt
<registry-name>och med värden från föregående<registry-username>steg. När du uppmanas till det skriver du ett av lösenorden från föregående steg.Du använder samma registernamn i alla återstående steg i det här avsnittet.
När inloggningen är lyckades taggar du den lokala Docker-avbildningen för registret:
docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestAnvänd kommandot
docker pushför att skicka avbildningen till registret:docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestDet kan ta några minuter att ladda upp avbildningen första gången eftersom den innehåller basavbildningen. Efterföljande uppladdningar går vanligtvis snabbare.
Medan du väntar kan du slutföra stegen i nästa avsnitt för att konfigurera App Service att distribuera från registret.
Använd kommandot
az acr repository listför att kontrollera att push-kommandot lyckades:az acr repository list -n <registry-name>Utdata bör visa namnet på bilden.
Konfigurera App Service att distribuera avbildningen från registret
Om du vill distribuera Azure App Service till en App Service skapar du först en webbapp på App Service och ansluter sedan webbappen till containerregistret. När webbappen startar App Service automatiskt avbildningen från registret.
Skapa en App Service plan med hjälp av
az appservice plan createkommandot :az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --is-linuxEn App Service plan motsvarar den virtuella dator som är värd för webbappen. Som standard använder det föregående kommandot en prisvärd B1-prisnivå som är kostnadsfri den första månaden. Du kan styra nivån med
--skuparametern .Skapa webbappen med
az webpp createkommandot :az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --deployment-container-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestErsätt
<app-name>med ett namn för webbappen, som måste vara unikt i hela Azure. Ersätt<registry-name>också med namnet på ditt register från föregående avsnitt.Använd
az webapp config appsettings setför att angeWEBSITES_PORTmiljövariabeln som förväntat av appkoden:az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WEBSITES_PORT=8000Ersätt
<app-name>med det namn som du använde i föregående steg.Mer information om den här miljövariabeln finns i viktigt i exemplets lagringsplats GitHub lagringsplats.
Aktivera den system tilldelade hanterade identiteten för webbappen med hjälp av kommandot
az webapp identity assign:az webapp identity assign --resource-group myResourceGroup --name <app-name> --query principalId --output tsvErsätt
<app-name>med det namn som du använde i föregående steg. Kommandots utdata (filtreras efter argumenten och) är tjänstens huvudnamn för den tilldelade--query--outputidentiteten, som du snart använder.Med hanterad identitet kan du bevilja behörigheter till webbappen för att få åtkomst till andra Azure-resurser utan att behöva några specifika autentiseringsuppgifter.
Hämta ditt prenumerations-ID
az account showmed kommandot , som du behöver i nästa steg:az account show --query id --output tsvGe den hanterade identiteten behörighet att komma åt containerregistret:
az role assignment create --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/<registry-name> --role "AcrPull"Ersätt följande värden:
<principal-id>med tjänstens huvudnamns-ID frånaz webapp identity assignkommandot<registry-name>med namnet på ditt containerregister<subscription-id>med prenumerations-ID:t som hämtats frånaz account showkommandot
Mer information om dessa behörigheter finns i Vad är rollbaserad åtkomstkontroll i Azure?
Konfigurera din app så att den använder den hanterade identiteten för att hämta Azure Container Registry.
az resource update --ids /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/<app-name>/config/web --set properties.acrUseManagedIdentityCreds=TrueErsätt följande värden:
<subscription-id>med prenumerations-ID:t som hämtats frånaz account showkommandot .<app-name>med namnet på din webbapp.
Tips
Om din app använder en användar tilldelad hanterad identitet angerdu ytterligare en egenskap
AcrUserManagedIdentityIDför att ange dess klient-ID:clientId=$(az identity show --resource-group <group-name> --name <identity-name> --query clientId --output tsv) az resource update --ids /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/<app-name>/config/web --set properties.AcrUserManagedIdentityID=$clientId
Distribuera avbildningen och testa appen
Du kan slutföra de här stegen när avbildningen har pushats till containerregistret och App Service har etablerats helt.
Använd kommandot
az webapp config container setför att ange containerregistret och avbildningen som ska distribueras för webbappen:az webapp config container set --name <app-name> --resource-group myResourceGroup --docker-custom-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest --docker-registry-server-url https://<registry-name>.azurecr.ioErsätt
<app-name>med namnet på din webbapp och ersätt på två platser med namnet på ditt<registry-name>register.- När du använder ett annat register än Docker Hub (som det visas i det här exemplet) måste formateras som följt av det fullständigt kvalificerade
--docker-registry-server-urlhttps://domännamnet för registret. - Meddelandet "Inga autentiseringsuppgifter har angetts för åtkomst till Azure Container Registry. Försöker leta upp..." anger att Azure använder appens hanterade identitet för att autentisera med containerregistret i stället för att fråga efter ett användarnamn och lösenord.
- Om du stöter på felet "AttributeError: 'NoneType' object has no attribute 'reserved'" (AttributeError: 'NoneType'-objektet har inget attribut som är reserverat) kontrollerar du att
<app-name>det är korrekt.
Tips
Du kan hämta webbappens containerinställningar när som helst med kommandot
az webapp config container show --name <app-name> --resource-group myResourceGroup. Avbildningen anges i egenskapenDOCKER_CUSTOM_IMAGE_NAME. När webbappen distribueras via Azure DevOps eller Azure Resource Manager-mallar kan avbildningen också visas i en egenskap med namnetLinuxFxVersion. Båda egenskaperna har samma syfte. Om båda finns i webbappens konfigurationLinuxFxVersionprioriteras.- När du använder ett annat register än Docker Hub (som det visas i det här exemplet) måste formateras som följt av det fullständigt kvalificerade
När kommandot
az webapp config container sethar slutförts bör webbappen köras i containern på App Service.Om du vill testa appen bläddrar
https://<app-name>.azurewebsites.netdu till och<app-name>ersätter med namnet på din webbapp. Vid första åtkomsten kan det ta lite tid för appen att svara eftersom App Service måste hämta hela avbildningen från registret. Om webbläsarens tider går ut behöver du bara uppdatera sidan. När den första avbildningen har hämtas körs efterföljande tester mycket snabbare.
Få åtkomst till diagnostikloggar
Medan du väntar på App Service ska hämta avbildningen är det bra att se exakt vad App Service gör genom att strömma containerloggarna till terminalen.
Aktivera containerloggning:
az webapp log config --name <app-name> --resource-group myResourceGroup --docker-container-logging filesystemAktivera loggströmmen:
az webapp log tail --name <app-name> --resource-group myResourceGroupOm du inte ser konsolloggarna omedelbart kan du titta efter igen efter 30 sekunder.
Du kan även granska loggfilerna från din webbläsare via
https://<app-name>.scm.azurewebsites.net/api/logs/docker.Skriv
Ctrl+Cnär som helst för att stoppa loggströmningen.
Konfigurera kontinuerlig distribution
Din App Service kan nu hämta containeravbildningen på ett säkert sätt från ditt privata containerregister. Den vet dock inte när avbildningen uppdateras i registret. Varje gång du push-pushar den uppdaterade avbildningen till registret måste du manuellt utlösa en avbildnings-pull genom att starta App Service appen. I det här steget aktiverar du CI/CD så att App Service meddelas om en ny avbildning och utlöser en pull-åtgärd automatiskt.
Aktivera CI/CD i App Service.
az webapp deployment container config --enable-cd true --name <app-name> --resource-group myResourceGroup --query CI_CD_URL --output tsvCI_CD_URLär en URL som App Service genererar åt dig. Registret bör ha den här URL:en för att App Service att en push-avbildning har inträffat. Den skapar inte webhooken åt dig.Skapa en webhook i containerregistret med hjälp av CI_CD_URL du fick från det senaste steget.
az acr webhook create --name appserviceCD --registry <registry-name> --uri '<ci-cd-url>' --actions push --scope appsvc-tutorial-custom-image:latestTesta om webhooken är korrekt konfigurerad genom att pinga webhooken och se om du får svaret 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"Tips
Om du vill se all information om alla webhook-händelser tar du bort
--queryparametern .Om du strömmar containerloggen bör du se meddelandet efter webhook-ping: , eftersom
Starting container for sitewebhooken utlöser att appen startas om. Eftersom du inte har gjort några uppdateringar av avbildningen finns det inget nytt för App Service hämta.
Ändra appkoden och distribuera om
I det här avsnittet gör du en ändring i webbappkoden, återskapar avbildningen och push-erar den sedan till containerregistret. App Service hämtar sedan automatiskt den uppdaterade avbildningen från registret för att uppdatera den webbapp som körs.
I den lokala mappen docker-django-webapp-linux öppnar du filappen/templates/app/index.html. **
Ändra det första HTML-elementet så att det matchar följande kod.
<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>Spara ändringarna.
Ändra till mappen docker-django-webapp-linux och återskapa avbildningen:
docker build --tag appsvc-tutorial-custom-image .Uppdatera versionsnumret i avbildningens tagg till v1.0.1:
docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:v1.0.1Byt ut
<registry-name>mot namnet på ditt register.Push-skicka avbildningen till registret:
docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:v1.0.1När avbildnings-pushen är klar meddelar webhooken App Service om push-meddelandet och App Service försöker hämta den uppdaterade avbildningen. Vänta några minuter och kontrollera sedan att uppdateringen har distribuerats genom att bläddra till
https://<app-name>.azurewebsites.net.
Anslut till containern med SSH
SSH möjliggör säker kommunikation mellan en container och en klient. Om du vill aktivera SSH-anslutning till containern måste din anpassade avbildning konfigureras för den. När containern körs kan du öppna en SSH-anslutning.
Konfigurera containern för SSH
Exempelappen som används i den här självstudien har redan den nödvändiga konfigurationen i Dockerfile, som installerar SSH-servern och även anger autentiseringsuppgifter för inloggning. Det här avsnittet är endast information. Om du vill ansluta till containern går du vidare till nästa avsnitt
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
Anteckning
Den här konfigurationen tillåter inte externa anslutningar till containern. SSH är endast tillgängligt via webbplatsen för Kudu/SCM. Kudu/SCM-webbplatsen autentiseras med ditt Azure-konto. root:Docker! bör inte ändras SSH. SCM/KUDU använder dina autentiseringsuppgifter för Azure Portal. Om du ändrar det här värdet uppstår ett fel när du använder SSH.
Dockerfile kopierar även sshd_config till mappen /etc/ssh/ och exponerar port 2222 på containern:
COPY sshd_config /etc/ssh/
# ...
EXPOSE 8000 2222
Port 2222 är en intern port som endast kan nås av containrar i bryggnätverket i ett privat virtuellt nätverk.
Slutligen startar startskriptet, init.sh, SSH-servern.
#!/bin/bash
service ssh start
Öppna SSH-anslutning till container
Bläddra till
https://<app-name>.scm.azurewebsites.net/webssh/hostoch logga in med ditt Azure-konto. Byt ut<app-name>mot namnet på din webbapp.När du har loggat in omdirigeras du till en informationssida för webbappen. Välj SSH överst på sidan för att öppna gränssnittet och använda kommandon.
Du kan till exempel undersöka de processer som körs i den med hjälp av
topkommandot .
Rensa resurser
De resurser som du skapade i den här artikeln kan medföra löpande kostnader. för att rensa resurserna behöver du bara ta bort resursgruppen som innehåller dem:
az group delete --name myResourceGroup
Nästa steg
Vad du lärt dig:
- Distribuera en anpassad avbildning till ett privat containerregister
- Distribuera och den anpassade avbildningen i App Service
- Uppdatera och distribuera om avbildningen
- Få åtkomst till diagnostikloggar
- Anslut till containern med SSH
- Push-skicka en anpassad Docker-avbildning till Azure Container Registry
- Distribuera den anpassade avbildningen till App Service
- Konfigurera miljövariabler
- Hämta avbildningen App Service en hanterad identitet
- Få åtkomst till diagnostikloggar
- Aktivera CI/CD från Azure Container Registry till App Service
- Anslut till containern med SSH
I nästa självstudie får du lära dig hur du mappar ett anpassat DNS-namn till din app.
Eller så kan du kolla in andra resurser:
