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.

Vereisten
Vereisten voor het voltooien van deze zelfstudie:
- Registreren voor een Docker Hub-account
- Docker voor Windows installeren.
- Docker instellen voor het uitvoeren van Windows-containers.
- Visual Studio 2019 installeren met de workloads ASP.NET- en webontwikkeling en Azure-ontwikkeling. Als u Visual Studio 2019 al hebt geïnstalleerd:
- Installeer de nieuwste updates in Visual Studio door te klikken op Help > Check for Updates.
- Voeg de werkbelastingen toe in Visual Studio door te klikken op Tools > Get Tools and Features.
De app lokaal instellen
Het voorbeeld downloaden
In deze stap stelt u het lokale .NET-project in.
- Download het voorbeeldproject.
- Pak het bestand custom-font-win-container.zip uit (unzip).
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.
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.
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).
Register maken en publiceren
Selecteer in de publicatiewizard Container Registry (containerregister) > Create New Azure Container Registry (nieuw Azure-containerregister maken) > Publish (publiceren).
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.

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 |

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:

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.

Klik op Ga naar resource.
Klik op de app-pagina onder URL op de koppeling.
Er wordt een nieuwe browserpagina geopend met de volgende pagina:

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

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.
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"], wordtinit.shaangeroepen 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.
Voer de volgende opdracht uit om de installatiekopie te bouwen:
docker build --tag appsvc-tutorial-custom-image .Test of de build werkt door de Docker-container lokaal uit te voeren:
docker run -it -p 8000:8000 appsvc-tutorial-custom-imageMet deze opdracht
docker runwordt de poort opgegeven met het argument-p, gevolgd door de naam van de installatiekopie.-ithiermee kunt u het stoppen metCtrl+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=inputhebt 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.Blader naar
http://localhost:8000om te controleren of de web-app en de container goed werken.
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.
Voer de opdracht
az acr createuit om een Azure Container Registry te maken:az acr create --name <registry-name> --resource-group myResourceGroup --sku Basic --admin-enabled trueVervang
<registry-name>door een geschikte naam voor het register. De naam moet uniek zijn in Azure en mag alleen letters en cijfers bevatten.Voer de opdracht
az acr showuit 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.
Gebruik de opdracht
docker loginom 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.
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:latestGebruik de opdracht
docker pushom de installatiekopie naar het register te pushen:docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestDe 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.
Gebruik de opdracht
az acr repository listom 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.
Maak een App Service-abonnement met behulp van de opdracht
az appservice plan create:az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --is-linuxEen 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.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:latestVervang
<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.Gebruik
az webapp config appsettings setom de omgevingsvariabeleWEBSITES_PORTin te stellen zoals verwacht voor de app-code:az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WEBSITES_PORT=8000Vervang
<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.
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 tsvVervang
<app-name>door de naam die u in de vorige stap hebt gebruikt. De uitvoer van de opdracht (gefilterd op de argumenten--queryen--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.
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 tsvVerleen 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 opdrachtaz webapp identity assign<registry-name>door de naam van het containerregister<subscription-id>door de abonnements-id die is opgehaald uit de opdrachtaz account show
Zie Wat is op rollen gebaseerd toegangsbeheer van Azure voor meer informatie over deze machtigingen.
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=TrueVervang de volgende waarden:
<subscription-id>door de abonnements-id die is opgehaald uit deaz account showopdracht .<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
AcrUserManagedIdentityIDclient-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.
Gebruik de opdracht
az webapp config container setom 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.ioVervang
<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-urlworden opgemaakt alshttps://, 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 eigenschapDOCKER_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 naamLinuxFxVersion. Beide eigenschappen hebben hetzelfde doel. Als beide aanwezig zijn in de configuratie van de web-app, heeftLinuxFxVersionprioriteit.- Wanneer u een ander register dan Docker Hub gebruikt (zoals weergegeven in dit voorbeeld), moet
Zodra de opdracht
az webapp config container setis 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.
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.
Schakel logboekregistratie voor container in:
az webapp log config --name <app-name> --resource-group myResourceGroup --docker-container-logging filesystemSchakel de logboekstream in:
az webapp log tail --name <app-name> --resource-group myResourceGroupAls 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.U kunt op elk gewenst moment
Ctrl+Ctypen 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.
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 tsvCI_CD_URLis 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.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:latestAls 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
--queryparameter .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 siteop 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.
Open in uw lokale map docker-django-webapp-linux het bestand app/templates/app/index.html.
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>Sla uw wijzigingen op.
Ga naar de map docker-django-webapp-linux en bouw de installatiekopie opnieuw:
docker build --tag appsvc-tutorial-custom-image .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.1Vervang
<registry-name>door de naam van uw register.Push de installatiekopie naar het register:
docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:v1.0.1Zodra 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.netbladeren.
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
Blader naar
https://<app-name>.scm.azurewebsites.net/webssh/hosten meld u aan met uw Azure-account. Vervang<app-name>door de naam van de web-app.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:
