Aangepaste software naar Azure App Service migreren met een aangepaste container

Azure App Service biedt vooraf gedefinieerde toepassingsstacks in Windows, zoals ASP.NET of Node.js, die worden uitgevoerd in IIS. Met de vooraf geconfigureerde Windows-omgeving wordt het besturingssysteem vergrendeld voor beheerderstoegang, software-installaties, wijzigingen aan de Global Assembly Cache, enzovoort. (Zie Functionaliteit van besturingssystemen in Azure App Service.) Als u echter een aangepaste Windows-container in App Service gebruikt, kunt u besturingssysteemwijzigingen aanbrengen die uw app nodig heeft, zodat het eenvoudig is om een on-premises app te migreren waarvoor aangepaste besturingssysteem- en softwareconfiguraties nodig zijn. Dit zelfstudie laat zien hoe u een ASP.NET-app naar App Service migreert die aangepaste lettertypen gebruikt die zijn geïnstalleerd in de Windows-lettertypenbibliotheek. U implementeert een aangepaste geconfigureerde Windows-installatiekopie van Visual Studio naar Azure Container Registry en voert deze vervolgens uit in de App-service.

Toont de web-app die wordt uitgevoerd in een Windows-container.

Vereisten

Vereisten voor het voltooien van deze zelfstudie:

De app lokaal instellen

Het voorbeeld downloaden

In deze stap stelt u het lokale .NET-project in.

Het voorbeeldproject bevat een eenvoudige ASP.NET toepassing die een aangepast lettertype gebruikt dat in de Windows-lettertypebibliotheek is geïnstalleerd. Het is niet nodig om lettertypen te installeren, maar het is een voorbeeld van een app die is geïntegreerd met het onderliggende besturingssysteem. Om een ​​dergelijke app naar App Service te migreren, wijzigt u uw code om de integratie te verwijderen of migreert u de code zoals ze is in een aangepaste Windows-container.

Het lettertype installeren

Navigeer in Windows Verkenner naar custom-font-win-container-master/CustomFontSample, klik met de rechtermuisknop op FrederickatheGreat-Regular.ttf en selecteer Installeren.

Dit lettertype is openbaar beschikbaar via Google Fonts.

De app uitvoeren

Open het bestand custom-font-win-container/CustomFontSample.sln in Visual Studio.

Typ Ctrl+F5 voor het uitvoeren van de app zonder foutopsporing. De app wordt weergegeven in de standaardbrowser.

Schermopname waarin de app wordt weergegeven in de standaardbrowser.

Omdat de app een geïnstalleerd lettertype gebruikt, kan deze niet worden uitgevoerd in de sandbox van App Service. U kunt de app echter in plaats daarvan implementeren met behulp van een Windows-container, omdat u het lettertype in de Windows-container kunt installeren.

Windows-container configureren

Klik in Solution Explorer met de rechtermuisknop op het project CustomFontSample en selecteer Add > Container Orchestration Support.

Schermopname van het Solution Explorer-venster waarin het project CustomFontSample en de menu-items Add en Container Orchestrator Support zijn geselecteerd.

Selecteer Docker Compose > OK.

Uw project is nu ingesteld om te worden uitgevoerd in een Windows-container. Er wordt een Dockerfile toegevoegd aan het project CustomFontSample, en er wordt een docker-compose-project toegevoegd aan de oplossing.

Open Dockerfile vanuit Solution Explorer.

U moet een ondersteunde bovenliggende installatiekopie gebruiken. Wijzig de bovenliggende installatiekopie door de regel FROM ​​te vervangen door de volgende code:

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019

Voeg aan het einde van het bestand de volgende regel toe en sla het bestand op:

RUN ${source:-obj/Docker/publish/InstallFont.ps1}

U kunt InstallFont.ps1 vinden in het project CustomFontSample. Het is een eenvoudig script waarmee het lettertype wordt geïnstalleerd. U vindt een complexere versie van het script in het Script Center.

Notitie

Als u de Windows-container lokaal wilt testen, controleert u of Docker is gestart op de lokale computer.

Publiceren naar Azure Container Registry

Azure Container Registry kan uw afbeeldingen opslaan voor containerimplementaties. U kunt App Service configureren voor het gebruik van installatiekopieën die worden gehost in Azure Container Registry.

Publicatie-wizard openen

Klik in Solution Explorer met de rechtermuisknop op het project CustomFontSample en selecteer Publish (publiceren).

Schermopname van het Solution Explorer-venster waarin het project CustomFontSample en de optie Publish zijn geselecteerd.

Register maken en publiceren

Selecteer in de publicatiewizard Container Registry (containerregister) > Create New Azure Container Registry (nieuw Azure-containerregister maken) > Publish (publiceren).

Schermopname van de wizard voor publiceren waarin de opties Container Registry, Create New Azure Container Registry en de knop Publish zijn geselecteerd.

Aanmelden met Azure-account

Selecteer Add an account (een account toevoegen) in het dialoogvenster Create a new Azure Container Registry (nieuw Azure-containerregister maken) en meld u vervolgens aan bij uw Azure-abonnement. Als u al bent aangemeld, selecteert u het account met het gewenste abonnement uit de vervolgkeuzelijst.

Aanmelden bij Azure

Het register configureren

Configureer het nieuwe containerregister op basis van de voorgestelde waarden in de volgende tabel. Klik op Create als u klaar bent.

Instelling Voorgestelde waarde Voor meer informatie
DNS-voorvoegsel Behoud de gegenereerde registernaam of wijzig deze in een andere unieke naam.
Resourcegroep Klik op New (nieuw), typ myResourceGroup en klik op OK.
SKU Basic Prijscategorieën
Registerlocatie Europa -west

Azure Container Registry configureren

Er wordt een terminalvenster geopend waarin de voortgang van het implementeren van de installatiekopie wordt getoond. Wacht totdat de installatie is voltooid.

Aanmelden bij Azure

Meld u aan bij Azure Portal op https://portal.azure.com.

Een webtoepassing maken

Selecteer in het menu links Create a resource (een resource maken) > Web > Web App for Containers.

Basisprincipes van app configureren

Configureer op het tabblad Basisprincipes de instellingen volgens de volgende tabel en klik op Volgende: Docker.

Instelling Voorgestelde waarde Voor meer informatie
Abonnement Zorg ervoor dat het correcte abonnement is geselecteerd.
Resourcegroep Selecteer Nieuwe maken, typ myResourceGroup en klik op OK.
Naam Typ een unieke naam. De URL van de web-app is https://<app-name>.azurewebsites.net, waarbij <app-name> de naam van uw app is.
Publiceren Docker-container
Besturingssysteem Windows
Regio Europa -west
Windows Plan Selecteer Nieuwe maken, typ myAppServicePlan en klik op OK.

Uw tabblad Basisprincipes moet er zo uitzien:

Toont het tabblad Basics dat wordt gebruikt om de web-app te configureren.

Windows-container configureren

Configureer op het tabblad Docker uw aangepaste Windows-container, zoals wordt weergegeven in de volgende tabel, en selecteer Beoordelen + maken.

Instelling Voorgestelde waarde
Bron van installatiekopie Azure Container Register
Register Selecteer het register dat u eerder hebt gemaakt.
Installatiekopie customfontsample
Tag meest recente

De app voltooien

Klik op Maken en wacht tot de vereiste resources zijn gemaakt in Azure.

Bladeren naar de web-app

Als de bewerking in Azure is voltooid, wordt er een melding weergegeven.

Toont dat de Azure-bewerking is voltooid.

  1. Klik op Ga naar resource.

  2. Klik op de app-pagina onder URL op de koppeling.

Er wordt een nieuwe browserpagina geopend met de volgende pagina:

Toont de nieuwe browserpagina voor de web-app.

Wacht een paar minuten en probeer het opnieuw, totdat u de startpagina krijgt met het mooie lettertype dat u verwacht:

Hiermee wordt de startpagina weergegeven met het lettertype dat u hebt geconfigureerd.

Gefeliciteerd! U hebt een ASP.NET toepassing gemigreerd naar Azure App Service in een Windows-container.

Logboeken voor opstarten van containers bekijken

Het kan enige tijd duren voordat de Windows-container is geladen. Als u de voortgang wilt bekijken, gaat u naar de volgende URL en vervangt u <app-name> door de naam van de app.

https://<app-name>.scm.azurewebsites.net/api/logstream

De gestreamde logboeken zien er als volgende uit:

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 gebruikt de Docker-containertechnologie voor het hosten van zowel ingebouwde installatiekopieën als aangepaste installatiekopieën. Voer de Azure CLI-opdracht az webapp list-runtimes --linux uit om een lijst met ingebouwde installatiekopieën te zien. Als deze installatiekopieën niet voldoen aan uw behoeften, kunt u een aangepaste installatiekopie bouwen en implementeren.

In deze zelfstudie leert u het volgende:

  • Een aangepaste Docker-afbeelding pushen naar Azure Container Registry
  • De aangepaste afbeelding implementeren in App Service
  • Omgevingsvariabelen configureren
  • Een afbeelding in een App Service met behulp van een beheerde identiteit
  • Toegang tot diagnostische logboeken
  • CI/CD inschakelen van Azure Container Registry naar App Service
  • Verbinding maken met de container via SSH

Voor het voltooien van deze zelfstudie kan een klein bedrag in rekening worden gebracht voor het containerregister, en er kunnen extra kosten in rekening worden gebracht als u de container langer dan een maand host.

Uw eerste omgeving instellen

  • U moet beschikken over een Azure-account met een actief abonnement. Gratis een account maken
  • Installeer Docker. Dit gebruikt u om Docker-installatiekopieën te bouwen. Voor het installeren van Docker moet de computer mogelijk opnieuw worden opgestart.
  • Gebruik de bash-omgeving in Azure Cloud shell.

    Cloud Shell starten in een nieuw venster

  • Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren.

    • Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht AZ login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij de Azure CLI voor aanvullende aanmeldingsopties.

    • Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.

    • Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.

  • Voor deze zelfstudie is versie 2.0.80 of hoger van Azure CLI vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie al geïnstalleerd.

Nadat u Docker hebt geïnstalleerd of Azure Cloud Shell hebt uitgevoerd, opent u een terminalvenster en controleert u of Docker is geïnstalleerd:

docker --version

De voorbeeld-app klonen of downloaden

U kunt het voorbeeld voor deze zelfstudie verkrijgen via een git-kloon of download.

Klonen met git

Kloon de voorbeeldopslagplaats:

git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input

Zorg ervoor dat u het argument --config core.autocrlf=input opneemt om te zorgen voor de juiste regeleinden in bestanden die worden gebruikt binnen de Linux-container:

Ga vervolgens naar die map:

cd docker-django-webapp-linux

Downloaden van GitHub

In plaats van de git-kloon te gebruiken kunt u naar https://github.com/Azure-Samples/docker-django-webapp-linux gaan, Klonen selecteren, en vervolgens ZIP downloaden selecteren.

Pak het ZIP-bestand uit in een map met de naam docker-django-webapp-linux.

Open vervolgens een terminalvenster in deze map docker-django-webapp-linux.

Het Docker-bestand bekijken (optioneel)

Het bestand in het voorbeeld met de naam Dockerfile dat de Docker-installatiekopie beschrijft en configuratie-instructies bevat:

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"]
  • Met de eerste groep opdrachten worden de vereisten van de app geïnstalleerd in de omgeving.
  • Met de tweede groep opdrachten wordt een SSH-server gemaakt voor veilige communicatie tussen de container en de host.
  • Met de laatste regel, ENTRYPOINT ["init.sh"], wordt init.sh aangeroepen om de SSH-service en Python-server te starten.

De installatiekopie lokaal bouwen en testen

Notitie

Docker Hub heeft quota voor het aantal anonieme pulls per IP-adres en het aantal geverifieerde pulls per gratis gebruiker (zie Gegevensoverdracht). Als u merkt dat er beperkingen gelden voor uw pulls uit Docker Hub, probeer dan docker login als u nog niet bent aangemeld.

  1. Voer de volgende opdracht uit om de installatiekopie te bouwen:

    docker build --tag appsvc-tutorial-custom-image .
    
  2. Test of de build werkt door de Docker-container lokaal uit te voeren:

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

    Met deze opdracht docker run wordt de poort opgegeven met het argument -p, gevolgd door de naam van de installatiekopie. -it hiermee kunt u het stoppen met Ctrl+C .

    Tip

    Als u uitvoert in Windows en deze fout ziet: standard_init_linux.go:211: exec user process caused ‘bestand of map bestaat niet’ , bevat het init.sh-bestand CR-LF-regeleinden in plaats van de verwachte LF-einden. Deze fout treedt op als u de git hebt gebruikt om de voorbeeldopslagplaats te klonen, maar de parameter --config core.autocrlf=input hebt weggelaten. In dit geval moet u de opslagplaats opnieuw klonen met het argument --config. U ziet de fout mogelijk ook als u init.sh hebt bewerkt en vervolgens hebt opgeslagen met CRLF-einden. In dit geval slaat u het bestand opnieuw op met alleen LF-einden.

  3. Blader naar http://localhost:8000 om te controleren of de web-app en de container goed werken.

    Web-app lokaal testen

Een resourcegroep maken

In deze en de volgende secties richt u resources in Azure in waarnaar u de installatiekopie pusht. Vervolgens implementeert u een container in Azure App Service. U begint met het maken van een resourcegroep waarin u al deze resources kunt verzamelen.

Voer de opdracht az group create uit om een resourcegroep te maken:

az group create --name myResourceGroup --location westeurope

U kunt de waarde --location wijzigen om een regio bij u in de buurt op te geven.

De installatiekopie naar Azure Container Registry pushen

In deze sectie pusht u de installatiekopie naar Azure Container Registry, waar deze kan worden geïmplementeerd via App Service.

  1. Voer de opdracht az acr create uit om een Azure Container Registry te maken:

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

    Vervang <registry-name> door een geschikte naam voor het register. De naam moet uniek zijn in Azure en mag alleen letters en cijfers bevatten.

  2. Voer de opdracht az acr show uit om referenties voor het register op te halen:

    az acr credential show --resource-group myResourceGroup --name <registry-name>
    

    De JSON-uitvoer van deze opdracht biedt twee wachtwoorden samen met de gebruikersnaam van het register.

  3. Gebruik de opdracht docker login om u aan te melden bij het containerregister:

    docker login <registry-name>.azurecr.io --username <registry-username>
    

    Vervang <registry-name> en <registry-username> door waarden uit de vorige stappen. Wanneer u hierom wordt gevraagd, voert u een van de wachtwoorden uit de vorige stap in.

    U gebruikt dezelfde registernaam in alle resterende stappen van deze sectie.

  4. Als de aanmelding is geslaagd, labelt u de lokale Docker-installatiekopie voor het register:

    docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  5. Gebruik de opdracht docker push om de installatiekopie naar het register te pushen:

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

    De eerste keer dat u de installatiekopie uploadt, kan dit enkele minuten duren, omdat deze upload de basisinstallatiekopie bevat. De volgende uploads zijn doorgaans sneller.

    Terwijl u wacht, kunt u de stappen in de volgende sectie voltooien om App Service te configureren voor implementatie vanuit het register.

  6. Gebruik de opdracht az acr repository list om te controleren of de push is geslaagd:

    az acr repository list -n <registry-name>
    

    In de uitvoer moet de naam van de installatiekopie te zien zijn.

App Service configureren voor implementatie van de installatiekopie vanuit het register

Als u een container wilt implementeren in Azure App Service, maakt u eerst een web-app in App Service. Vervolgens verbindt u de web-app met het containerregister. Wanneer de web-app start, wordt de installatiekopie met App Service automatisch opgehaald uit het register.

  1. Maak een App Service-abonnement met behulp van de opdracht az appservice plan create:

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

    Een App Service-abonnement komt overeen met de virtuele machine die als host fungeert voor de web-app. De vorige opdracht maakt standaard gebruik van een goedkope B1-prijscategorie die de eerste maand gratis is. U kunt de categorie beheren met de parameter --sku.

  2. Maak de web-app met de opdracht az webpp create:

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

    Vervang <app-name> door een naam voor de web-app. Deze moet uniek zijn in Azure. Vervang ook <registry-name> door de naam van uw register uit de vorige sectie.

  3. Gebruik az webapp config appsettings set om de omgevingsvariabele WEBSITES_PORT in te stellen zoals verwacht voor de app-code:

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

    Vervang <app-name> door de naam die u in de vorige stap hebt gebruikt.

    Raadpleeg de Leesmij in de voorbeeldopslagplaats van GitHub voor meer informatie over deze omgevingsvariabele.

  4. Schakel de door het systeem toegewezen beheerde identiteit voor de web-app in met behulp van de opdracht az webapp identity assign :

    az webapp identity assign --resource-group myResourceGroup --name <app-name> --query principalId --output tsv
    

    Vervang <app-name> door de naam die u in de vorige stap hebt gebruikt. De uitvoer van de opdracht (gefilterd op de argumenten --query en --output) is de service-principal van de toegewezen identiteit. Deze gebruikt u zo meteen.

    Met beheerde identiteit kunt u de web-app toegang verlenen tot andere Azure-resources zonder dat hiervoor specifieke referenties nodig zijn.

  5. Haal uw abonnements-id op met de opdracht az account show, die u in de volgende stap nodig hebt:

    az account show --query id --output tsv
    
  6. Verleen de beheerde identiteit toegang tot het containerregister:

    az role assignment create --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/<registry-name> --role "AcrPull"
    

    Vervang de volgende waarden:

    • <principal-id> door de service-principal-id uit de opdracht az webapp identity assign
    • <registry-name> door de naam van het containerregister
    • <subscription-id> door de abonnements-id die is opgehaald uit de opdracht az account show

    Zie Wat is op rollen gebaseerd toegangsbeheer van Azure voor meer informatie over deze machtigingen.

  7. Configureer uw app voor het gebruik van de beheerde identiteit om gegevens op te halen uit Azure Container Registry.

    az resource update --ids /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/<app-name>/config/web --set properties.acrUseManagedIdentityCreds=True
    

    Vervang de volgende waarden:

    • <subscription-id> door de abonnements-id die is opgehaald uit de az account show opdracht .
    • <app-name> door de naam van uw web-app.

    Tip

    Als uw app gebruikmaakt van een door de gebruiker toegewezen beheerde identiteit,stelt u een extra eigenschap in om de AcrUserManagedIdentityID client-id op te geven:

    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
    

De installatiekopie implementeren en de app testen

U kunt deze stappen voltooien zodra de installatiekopie naar het containerregister is gepusht en de App Service volledig is ingericht.

  1. Gebruik de opdracht az webapp config container set om het containerregister en de installatiekopie op te geven die voor de web-app moeten worden geïmplementeerd:

    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
    

    Vervang <app-name> door de naam van de web-app en vervang <registry-name> op twee plekken door de naam van het register.

    • Wanneer u een ander register dan Docker Hub gebruikt (zoals weergegeven in dit voorbeeld), moet --docker-registry-server-url worden opgemaakt als https://, gevolgd door de Fully Qualified Domain Name van het register.
    • Het bericht 'Geen referentie opgegeven om toegang te krijgen tot Azure Container Registry. Proberen op te zoeken...' geeft aan dat in Azure de beheerde identiteit van de app wordt gebruikt voor verificatie bij het containerregister, in plaats van dat om een gebruikersnaam en wachtwoord wordt gevraagd.
    • Als u deze fout ziet: ‘AttributeError: Object "NoneType" heeft geen kenmerk "gereserveerd".’ Controleert u of uw <app-name> juist is.

    Tip

    U kunt de containerinstellingen van de web-app op elk gewenst moment ophalen met de opdracht az webapp config container show --name <app-name> --resource-group myResourceGroup. De installatiekopie wordt opgegeven in de eigenschap DOCKER_CUSTOM_IMAGE_NAME. Wanneer de web-app is geïmplementeerd via Azure DevOps- of Azure Resource Manager-sjablonen, kan de installatiekopie ook worden weergegeven in een eigenschap met de naam LinuxFxVersion. Beide eigenschappen hebben hetzelfde doel. Als beide aanwezig zijn in de configuratie van de web-app, heeft LinuxFxVersion prioriteit.

  2. Zodra de opdracht az webapp config container set is voltooid, moet de web-app worden uitgevoerd in de container in App Service.

    Als u de app wilt testen, bladert u naar https://<app-name>.azurewebsites.net, waarbij u <app-name> vervangt door de naam van de web-app. Als u de app de eerste keer opent, kan het enige tijd duren voordat de app reageert, omdat App Service de hele installatiekopie moet ophalen uit het register. Als er een time-out optreedt voor de browser, vernieuwt u gewoon de pagina. Zodra de eerste installatiekopie is opgehaald, verlopen volgende tests veel sneller.

    Geslaagde test van de web-app in Azure

Toegang tot diagnostische logboeken

Terwijl u wacht tot de App Service de afbeelding op te halen, is het handig om precies te zien wat App Service doet door de containerlogboeken naar uw terminal te streamen.

  1. Schakel logboekregistratie voor container in:

    az webapp log config --name <app-name> --resource-group myResourceGroup --docker-container-logging filesystem
    
  2. Schakel de logboekstream in:

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

    Als u de consolelogboeken niet meteen ziet, probeert u het opnieuw na 30 seconden.

    U kunt ook de logboekbestanden van de browser inspecteren op https://<app-name>.scm.azurewebsites.net/api/logs/docker.

  3. U kunt op elk gewenst moment Ctrl+C typen om te stoppen met logboekstreaming.

Continue implementatie inschakelen

Uw App Service-app kan de containerafbeelding nu veilig uit uw privécontainerregister halen. Het weet echter niet wanneer die afbeelding in uw register wordt bijgewerkt. Telkens wanneer u de bijgewerkte afbeelding naar het register pusht, moet u handmatig een pull van een afbeelding activeren door de app opnieuw op App Service starten. In deze stap schakelt u CI/CD in, zodat App Service op de hoogte wordt gesteld van een nieuwe afbeelding en automatisch een pull-code activeert.

  1. Ci/CD inschakelen in 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 is een URL die App Service voor u genereert. Uw register moet deze URL gebruiken om een melding te App Service dat er een push van de afbeelding is opgetreden. De webhook wordt niet daadwerkelijk voor u aan het maken.

  2. Maak een webhook in uw containerregister met behulp van CI_CD_URL die u in de laatste stap hebt gemaakt.

    az acr webhook create --name appserviceCD --registry <registry-name> --uri '<ci-cd-url>' --actions push --scope appsvc-tutorial-custom-image:latest
    
  3. Als u wilt testen of uw webhook juist is geconfigureerd, pingt u de webhook en bekijkt u of u een 200 OK-antwoord krijgt.

    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"
    

    Tip

    Als u alle informatie over alle webhookgebeurtenissen wilt zien, verwijdert u de --query parameter .

    Als u het containerlogboek streamt, ziet u het bericht na het pingen van de webhook: , omdat de webhook de app activeert om opnieuw Starting container for site op te starten. Omdat u nog geen updates hebt aangebracht aan de afbeelding, is er niets nieuws voor het App Service om op te halen.

De app-code wijzigen en opnieuw implementeren

In deze sectie maakt u een wijziging in de code van de web-app, bouwt u de afbeelding opnieuw en pusht u deze naar het containerregister. In App Service wordt vervolgens automatisch de bijgewerkte installatiekopie opgehaald uit het register om de actieve web-app bij te werken.

  1. Open in uw lokale map docker-django-webapp-linux het bestand app/templates/app/index.html.

  2. Wijzig eerst het HTML-element om overeen te komen met de volgende code.

    <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. Sla uw wijzigingen op.

  4. Ga naar de map docker-django-webapp-linux en bouw de installatiekopie opnieuw:

    docker build --tag appsvc-tutorial-custom-image .
    
  5. Werk het versienummer van de installatiekopietag bij naar v1.0.1:

    docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:v1.0.1
    

    Vervang <registry-name> door de naam van uw register.

  6. Push de installatiekopie naar het register:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:v1.0.1
    
  7. Zodra het pushen van de afbeelding is voltooid, meldt de webhook App Service over de push en probeert App Service de bijgewerkte afbeelding op te halen. Wacht enkele minuten en controleer of de update is geïmplementeerd door naar te https://<app-name>.azurewebsites.net bladeren.

Verbinding maken met de container via SSH

SSH maakt veilige communicatie tussen een container en een client mogelijk. Als u een SSH-verbinding met uw container wilt inschakelen, moet uw aangepaste installatiekopie hiervoor worden geconfigureerd. Als de container eenmaal wordt uitgevoerd, kunt u een SSH-verbinding openen.

De container configureren voor SSH

De voorbeeld-app die in deze zelfstudie wordt gebruikt, beschikt al over de benodigde configuratie in het Dockerfile, waarmee de SSH-server wordt geïnstalleerd en de aanmeldingsreferenties worden ingesteld. Deze sectie is alleen ter informatie. Ga naar de volgende sectie om verbinding te maken met de container

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 

Notitie

Deze configuratie staat geen externe verbindingen naar de container toe. SSH is alleen beschikbaar via de Kudu/SCM-Site. De Kudu/SCM-site wordt geverifieerd met uw Azure-account. root:Docker! mag niet worden gewijzigd in SSH. SCM/KUDU gebruikt uw azure-portalreferenties. Het wijzigen van deze waarde resulteert in een fout bij het gebruik van SSH.

Met het Dockerfile wordt ook het bestand sshd_config gekopieerd naar de map /etc/ssh/ , en wordt poort 2222 zichtbaar in de container:

COPY sshd_config /etc/ssh/

# ...

EXPOSE 8000 2222

Poort 2222 is interne poort die alleen toegankelijk is voor containers in het brugnetwerk van een virtueel particulier netwerk.

Ten slotte wordt de SSH-server gestart met het invoerscript init.sh.

#!/bin/bash
service ssh start

SSH-verbinding met de container openen

  1. Blader naar https://<app-name>.scm.azurewebsites.net/webssh/host en meld u aan met uw Azure-account. Vervang <app-name> door de naam van de web-app.

  2. Wanneer u bent aangemeld, wordt u omgeleid naar een informatiepagina voor de web-app. Selecteer bovenaan de pagina SSH om de shell te openen en opdrachten te gebruiken.

    U kunt bijvoorbeeld de processen die in de shell worden uitgevoerd, controleren met behulp van de opdracht top.

Resources opschonen

Voor de resources die u in dit artikel hebt gemaakt, kunnen lopende kosten in rekening worden gebracht. Als u de resources wilt opschonen, hoeft u alleen de resourcegroep te verwijderen die ze bevat:

az group delete --name myResourceGroup

Volgende stappen

Wat u hebt geleerd:

  • Een aangepaste installatiekopie in een privécontainerregister implementeren
  • De aangepaste installatiekopie implementeren in App Service
  • De installatiekopie bijwerken en opnieuw implementeren
  • Toegang tot diagnostische logboeken
  • Verbinding maken met de container via SSH
  • Een aangepaste Docker-afbeelding pushen naar Azure Container Registry
  • De aangepaste afbeelding implementeren in App Service
  • Omgevingsvariabelen configureren
  • Een afbeelding in App Service met behulp van een beheerde identiteit
  • Toegang tot diagnostische logboeken
  • CI/CD inschakelen van Azure Container Registry naar App Service
  • Verbinding maken met de container via SSH

In de volgende zelfstudie leer u hoe u een aangepaste DNS-naam kunt toewijzen aan uw app.

U kunt ook andere resources bekijken: