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.

Visar webbappen som körs i en Windows container.

Förutsättningar

För att slutföra den här kursen behöver du:

Konfigurera appen lokalt

Ladda ned exemplet

I det här steget konfigurerar du det lokala .NET-projektet.

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.

Skärmbild som visar appen som visas i standardwebbläsaren.

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).

Skärmbild av fönstret Solution Explorer visar de valda menyalternativen CustomFontSample-projekt, Lägg till och Container Orchestrator-stöd.

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.

Skärmbild av Solution Explorer visar CustomFontSample-projektet och Publicera valt.

Skapa register och publicera

I publiceringsguiden väljer du Container Registry > Skapa ny Azure Container Registry > Publicera.

Skärmbild av publiceringsguiden som visar Container Registry, Skapa Azure Container Registry och knappen Publicera markerad.

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.

Logga in på Azure

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

Konfigurera Azure-containerregister

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

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:

Visar fliken Grundläggande inställningar som används för att konfigurera webbappen.

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.

Visar att Azure-åtgärden har slutförts.

  1. Klicka på Gå till resurs.

  2. På appsidan klickar du på länken under URL.

En ny webbläsarsida öppnas på följande sida:

Visar den nya webbläsarsidan för webbappen.

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

Visar startsidan med det teckensnitt som du har konfigurerat.

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.

    Starta Cloud Shell i ett nytt fönster

  • 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, , anropar init.sh fö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.

  1. Kör följande kommando för att skapa avbildningen:

    docker build --tag appsvc-tutorial-custom-image .
    
  2. Testa att bygget fungerar genom att köra Docker-containern lokalt:

    docker run -it -p 8000:8000 appsvc-tutorial-custom-image
    

    Det docker run här kommandot anger porten med argumentet följt av namnet på -p avbildningen. -it låter dig stoppa den med Ctrl+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=input parametern . 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.

  3. Bläddra till http://localhost:8000 för att kontrollera att webbappen och containern fungerar korrekt.

    Testa webbappen lokalt

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.

  1. Kör kommandot az acr create för att skapa en Azure Container Registry:

    az acr create --name <registry-name> --resource-group myResourceGroup --sku Basic --admin-enabled true
    

    Ersä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.

  2. Kör kommandot az acr show fö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.

  3. Använd kommandot docker login fö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.

  4. 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:latest
    
  5. Använd kommandot docker push för att skicka avbildningen till registret:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Det 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.

  6. Använd kommandot az acr repository list fö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.

  1. Skapa en App Service plan med hjälp av az appservice plan create kommandot :

    az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --is-linux
    

    En 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 --sku parametern .

  2. Skapa webbappen med az webpp create kommandot :

    az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --deployment-container-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Ersä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.

  3. Använd az webapp config appsettings set för att ange WEBSITES_PORT miljövariabeln som förväntat av appkoden:

    az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WEBSITES_PORT=8000
    

    Ersä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.

  4. 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 tsv
    

    Ersä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 --output identiteten, 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.

  5. Hämta ditt prenumerations-ID az account show med kommandot , som du behöver i nästa steg:

    az account show --query id --output tsv
    
  6. Ge 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ån az webapp identity assign kommandot
    • <registry-name> med namnet på ditt containerregister
    • <subscription-id> med prenumerations-ID:t som hämtats från az account show kommandot

    Mer information om dessa behörigheter finns i Vad är rollbaserad åtkomstkontroll i Azure?

  7. 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=True
    

    Ersätt följande värden:

    • <subscription-id> med prenumerations-ID:t som hämtats från az account show kommandot .
    • <app-name> med namnet på din webbapp.

    Tips

    Om din app använder en användar tilldelad hanterad identitet angerdu ytterligare en egenskap AcrUserManagedIdentityID fö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.

  1. Använd kommandot az webapp config container set fö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.io
    

    Ersä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-url https:// 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 egenskapen DOCKER_CUSTOM_IMAGE_NAME . När webbappen distribueras via Azure DevOps eller Azure Resource Manager-mallar kan avbildningen också visas i en egenskap med namnet LinuxFxVersion . Båda egenskaperna har samma syfte. Om båda finns i webbappens konfiguration LinuxFxVersion prioriteras.

  2. När kommandot az webapp config container set har slutförts bör webbappen köras i containern på App Service.

    Om du vill testa appen bläddrar https://<app-name>.azurewebsites.net du 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.

    Lyckat test av webbappen på Azure

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.

  1. Aktivera containerloggning:

    az webapp log config --name <app-name> --resource-group myResourceGroup --docker-container-logging filesystem
    
  2. Aktivera loggströmmen:

    az webapp log tail --name <app-name> --resource-group myResourceGroup
    

    Om 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.

  3. Skriv Ctrl+C nä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.

  1. 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 tsv
    

    CI_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.

  2. 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:latest
    
  3. Testa 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 --query parametern .

    Om du strömmar containerloggen bör du se meddelandet efter webhook-ping: , eftersom Starting container for site webhooken 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.

  1. I den lokala mappen docker-django-webapp-linux öppnar du filappen/templates/app/index.html. **

  2. Ä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>
    
  3. Spara ändringarna.

  4. Ändra till mappen docker-django-webapp-linux och återskapa avbildningen:

    docker build --tag appsvc-tutorial-custom-image .
    
  5. 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.1
    

    Byt ut <registry-name> mot namnet på ditt register.

  6. Push-skicka avbildningen till registret:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:v1.0.1
    
  7. Nä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

  1. Bläddra till https://<app-name>.scm.azurewebsites.net/webssh/host och logga in med ditt Azure-konto. Byt ut <app-name> mot namnet på din webbapp.

  2. 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 top kommandot .

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: