Delen via


Een aangepaste container configureren voor Azure App Service

In dit artikel leest u hoe u een aangepaste container configureert die moet worden uitgevoerd op Azure-app Service.

Meer informatie over de belangrijkste concepten en instructies voor containerisatie van Windows-apps in App Service. Nieuwe gebruikers moeten eerst de snelle start en de handleiding voor aangepaste containers volgen.

Meer informatie over de belangrijkste concepten en instructies voor containerisatie van Linux-apps in App Service. Nieuwe gebruikers moeten eerst de quickstart voor aangepaste containers en de zelfstudie volgen. Voor sidecarcontainers, zie Zelfstudie: Een sidecarcontainer configureren voor een aangepaste container in Azure App Service.

Notitie

Het gebruik van een service principal voor authenticatie bij het ophalen van Windows-containerafbeeldingen wordt niet meer ondersteund. U wordt aangeraden beheerde identiteit te gebruiken voor zowel Windows- als Linux-containers.

Ondersteunde basisafbeeldingen

Selecteer de juiste bovenliggende afbeelding (basisafbeelding) voor het framework van uw aangepaste Windows-afbeelding:

  • Als u .NET Framework-apps wilt implementeren, gebruikt u een bovenliggende afbeelding op basis van de release van Windows Server 2019 Core Long-Term Servicing Channel.
  • Als u .NET Core-apps wilt uitrollen, gebruikt u een ouderafbeelding gebaseerd op de Windows Server 2019 Nano Jaarlijks Kanaal-release.

Het duurt wat tijd om bovenliggende images te downloaden bij het opstarten van de app. U kunt de opstarttijd verminderen door gebruik te maken van een van de volgende basisafbeeldingen die al in de cache zijn opgeslagen in Azure App Service.

De Docker-image van een aangepaste container wijzigen

Gebruik de volgende opdracht om de huidige Docker-afbeelding te vervangen door een nieuwe afbeelding in een bestaande aangepaste container:

az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name <docker-hub-repo>/<image>

Een afbeelding uit een privéregister gebruiken

Als u een afbeelding uit een privéregister wilt gebruiken, zoals Azure Container Registry, voert u de volgende opdracht uit:

az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name <image-name> --docker-registry-server-url <private-repo-url> --docker-registry-server-user <username> --docker-registry-server-password <password>

Geef de aanmeldingsreferenties op voor uw persoonlijke registeraccount in de \<username> en \<password> velden.

Beheerde identiteit gebruiken om een containerimage op te halen uit Azure Container Registry

Gebruik de volgende stappen om uw web-app te configureren voor het ophalen uit Azure Container Registry met behulp van een beheerde identiteit. In de stappen wordt gebruikgemaakt van door het systeem toegewezen beheerde identiteit, maar u kunt ook door de gebruiker toegewezen beheerde identiteit gebruiken.

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

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

    Vervang <de app-naam> door de naam die u in de vorige stap hebt gebruikt. De uitvoer van de opdracht, gefilterd op de --query en --output argumenten, is de service-principal-id van de toegewezen identiteit.

  2. Haal de resource-id van uw containerregister op:

    az acr show --resource-group <group-name> --name <registry-name> --query id --output tsv
    

    Vervang <de registernaam> door de naam van het register. De uitvoer van de opdracht, gefilterd op de --query en --output argumenten, is de resource-id van het containerregister.

  3. Verleen de beheerde identiteit toegang tot het containerregister.

    az role assignment create --assignee <principal-id> --scope <registry-resource-id> --role "AcrPull"
    

    Vervang de volgende waarden:

    • <principal-id met de service-principal-id> uit het az webapp identity assign commando
    • <register-resource-id> met de id van uw containerregister vanuit de az acr show opdracht

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

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

    az webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUseManagedIdentityCreds": true}'
    

    Vervang de volgende waarden:

    • <app-naam> met de naam van uw web-app.

    Aanbeveling

    Als u de PowerShell-console gebruikt om de opdrachten uit te voeren, escapet u de tekenreeksen in het --generic-configurations argument in deze stap en de volgende stap. Voorbeeld: --generic-configurations '{\"acrUseManagedIdentityCreds\": true'.

  5. (Optioneel) Als uw app gebruikmaakt van een door de gebruiker toegewezen beheerde identiteit, controleert u of de identiteit is geconfigureerd in de web-app en stelt u vervolgens de eigenschap in om de acrUserManagedIdentityID client-id op te geven:

    az identity show --resource-group <group-name> --name <identity-name> --query clientId --output tsv
    

    Vervang de <identity-name> van uw gebruikertoegewezen beheerde identiteit en gebruik het resultaat <client-id> om de gebruikertoegewezen beheerde identiteit-id te configureren.

    az  webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUserManagedIdentityID": "<client-id>"}'
    

De web-app maakt nu gebruik van een beheerde identiteit om uit Azure Container Registry te halen.

Een afbeelding uit een netwerk-beveiligd register gebruiken

Als u verbinding wilt maken met een register in een virtueel netwerk of on-premises, moet uw app worden geïntegreerd met een virtueel netwerk. U hebt ook virtuele netwerkintegratie nodig voor Azure Container Registry met een privé-eindpunt. Nadat u uw netwerk en DNS-omzetting hebt geconfigureerd, schakelt u het ophalen van afbeeldingen via het virtuele netwerk in. Configureer de vnetImagePullEnabled site-instelling:

az resource update --resource-group <group-name> --name <app-name> --resource-type "Microsoft.Web/sites" --set properties.vnetImagePullEnabled [true|false]

Problemen oplossen met wat u moet doen als u de bijgewerkte container niet ziet

Als u de Docker-containerinstellingen zo wijzigt dat deze verwijst naar een nieuwe container, kan het enkele minuten duren voordat de app HTTP-aanvragen van de nieuwe container verwerkt. Terwijl de nieuwe container wordt opgehaald en gestart, blijft App Service aanvragen van de oude container verwerken. App Service verzendt alleen aanvragen naar de nieuwe container nadat deze is gestart en kan aanvragen ontvangen.

Leer hoe container-afbeeldingen worden opgeslagen

De eerste keer dat u een aangepaste Docker-image uitvoert in App Service, voert App Service de docker pull-opdracht uit en haalt het alle afbeeldingslagen op. De lagen worden opgeslagen op schijf, hetzelfde als wanneer u Docker on-premises gebruikt. Telkens wanneer de app opnieuw wordt opgestart, voert App Service de docker pull opdracht uit. Het haalt alleen gewijzigde lagen op. Als er geen wijzigingen zijn, gebruikt App Service bestaande lagen op de lokale schijf.

Als de app rekeninstanties om welke reden dan ook wijzigt (zoals het wijzigen van prijscategorieën), moet App Service opnieuw alle lagen ophalen. Hetzelfde geldt als u uitschaalt om meer exemplaren toe te voegen. In zeldzame gevallen kunnen de app-exemplaren ook veranderen zonder een schaalbewerking.

Poortnummer configureren

Standaard gaat App Service ervan uit dat uw aangepaste container luistert op poort 80. Als uw container naar een andere poort luistert, stelt u de WEBSITES_PORT app-instelling in uw App Service-app in. U kunt deze instellen met behulp van Azure Cloud Shell. Gebruik in Bash de volgende opdracht:

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

Gebruik in PowerShell de volgende opdracht:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_PORT"="8000"}

Met App Service kan uw container momenteel slechts één poort beschikbaar maken voor HTTP-aanvragen.

Omgevingsvariabelen configureren

Uw aangepaste container kan omgevingsvariabelen gebruiken die u extern moet opgeven. U kunt ze doorgeven met behulp van Cloud Shell. Gebruik in Bash de volgende opdracht:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings DB_HOST="myownserver.mysql.database.azure.com"

Gebruik in PowerShell de volgende opdracht:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"DB_HOST"="myownserver.mysql.database.azure.com"}

Wanneer uw app wordt uitgevoerd, worden de App Service-app-instellingen automatisch als omgevingsvariabelen in het proces geïnjecteerd. U kunt variabelen voor de containeromgeving controleren met de URL https://<app-name>.scm.azurewebsites.net/Env.

Wanneer u via SSH toegang tot een container met aangepaste Docker-images krijgt, ziet u mogelijk slechts enkele omgevingsvariabelen als u opdrachten zoals env of printenv probeert te gebruiken. Als u alle omgevingsvariabelen in de container wilt zien, zoals omgevingsvariabelen die u voor runtimegebruik aan uw toepassing doorgeeft, voegt u deze regel toe aan het invoerpuntscript:

eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/g' | sed '/=/s//="/' | sed 's/$/"/' >> /etc/profile)

Bekijk een volledig voorbeeld.

Als uw app gebruikmaakt van afbeeldingen uit een privéregister of van Docker Hub, worden de referenties voor toegang tot de opslagplaats opgeslagen in omgevingsvariabelen: DOCKER_REGISTRY_SERVER_URL, DOCKER_REGISTRY_SERVER_USERNAME en DOCKER_REGISTRY_SERVER_PASSWORD. Vanwege beveiligingsrisico's worden geen van deze gereserveerde variabelenamen blootgesteld aan de toepassing.

Voor containers van Internet Information Services (IIS) of .NET Framework (4.0 of later) worden referenties automatisch als .NET-app-instellingen en verbindingsreeksen in System.ConfigurationManager geïnjecteerd door App Service. Voor alle andere talen of frameworks worden ze geleverd als omgevingsvariabelen voor het proces, met een van de volgende voorvoegsels:

  • APPSETTING_
  • SQLCONTR_
  • MYSQLCONTR_
  • SQLAZURECOSTR_
  • POSTGRESQLCONTR_
  • CUSTOMCONNSTR_

U kunt deze methode gebruiken voor apps met één container of voor meerdere containers, waarbij de omgevingsvariabelen worden opgegeven in het docker-compose.yml bestand.

Permanente gedeelde opslag gebruiken

U kunt de C:\home map in uw aangepaste containerbestandssysteem gebruiken om bestanden op te slaan tijdens het opnieuw opstarten en deze te delen tussen exemplaren. Wanneer u de C:\home map gebruikt, heeft uw aangepaste container toegang tot permanente opslag.

Wanneer permanente opslag is uitgeschakeld, worden schrijfbewerkingen naar de C:\home map niet behouden tijdens het opnieuw opstarten van de app of in meerdere exemplaren. Wanneer permanente opslag is ingeschakeld, blijven alle schrijfbewerkingen naar de C:\home map behouden. Alle exemplaren van een geschaalde app hebben toegang ertoe. Wanneer de container wordt gestart, als er bestanden aanwezig zijn in de permanente opslag, overschrijven ze inhoud in de C:\home map van de container.

De enige uitzondering hierop is de C:\home\LogFiles directory. In deze map worden de container- en toepassingslogboeken opgeslagen. De map blijft altijd behouden wanneer de app opnieuw wordt opgestart als de toepassingslogboekregistratie is ingeschakeld met de optie Bestandssysteem , of permanente opslag al dan niet is ingeschakeld. Met andere woorden, wanneer u permanente opslag inschakelt of uitschakelt, heeft dit geen invloed op het gedrag van toepassingslogboekregistratie.

Permanente opslag is standaard ingeschakeld voor aangepaste Windows-containers. Als u dit wilt uitschakelen, stelt u de waarde WEBSITES_ENABLE_APP_SERVICE_STORAGE van de false app-instelling in op met behulp van Cloud Shell. Gebruik in Bash de volgende opdracht:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=false

Gebruik in PowerShell de volgende opdracht:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=false}

U kunt de /home map in uw aangepaste containerbestandssysteem gebruiken om bestanden op te slaan tijdens het opnieuw opstarten en deze te delen tussen exemplaren. Wanneer u de C:\home map gebruikt, heeft uw aangepaste container toegang tot permanente opslag. Houd er rekening mee dat gegevens die u opslaat, /home bijdragen aan het quotum voor opslagruimte dat is opgenomen in uw App Service-plan.

Wanneer permanente opslag is uitgeschakeld, worden schrijfbewerkingen naar de C:\home map niet behouden tijdens het opnieuw opstarten van de app of in meerdere exemplaren. Wanneer permanente opslag is ingeschakeld, blijven alle schrijfbewerkingen naar de C:\home map behouden. Alle exemplaren van een geschaalde app hebben toegang ertoe. Wanneer de container wordt gestart, als er bestanden aanwezig zijn in de permanente opslag, overschrijven ze inhoud in de C:\home map van de container.

De enige uitzondering is de C:\home\LogFiles directory. In deze map worden de container- en toepassingslogboeken opgeslagen. De map blijft altijd behouden wanneer de app opnieuw wordt opgestart als de toepassingslogboekregistratie is ingeschakeld met de optie Bestandssysteem , of permanente opslag al dan niet is ingeschakeld. Met andere woorden, wanneer u permanente opslag inschakelt of uitschakelt, heeft dit geen invloed op het gedrag van toepassingslogboekregistratie.

U wordt aangeraden gegevens te schrijven naar /home of een gekoppeld Azure-opslagpad. Gegevens die u buiten deze paden schrijft, zijn niet permanent tijdens het opnieuw opstarten. De gegevens worden opgeslagen in door platform beheerde hostschijfruimte, gescheiden van het quotum voor bestandsopslag van App Service-plannen.

Permanente opslag is standaard uitgeschakeld voor aangepaste Linux-containers. Als u dit wilt inschakelen, stelt u de waarde WEBSITES_ENABLE_APP_SERVICE_STORAGE van de true app-instelling in op met behulp van Cloud Shell. Gebruik in Bash de volgende opdracht:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=true

Gebruik in PowerShell de volgende opdracht:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=true}

Notitie

U kunt ook uw eigen permanente opslag configureren.

HTTPS-sessie detecteren

App Service beëindigt TLS aan de front-ends. Dat betekent dat TLS-aanvragen nooit bij uw app komen. U hoeft geen ondersteuning voor TLS in uw app te implementeren.

De front-ends bevinden zich in Azure-datacenters. Als u TLS gebruikt met uw app, wordt uw verkeer via internet altijd veilig versleuteld.

ASP.NET machinesleutelinjectie aanpassen

Tijdens het starten van de container worden sleutels automatisch gegenereerd en in de container geïnjecteerd als de computersleutels voor ASP.NET cryptografische routines. U vindt deze sleutels in uw container door te zoeken naar de volgende omgevingsvariabelen: MACHINEKEY_Decryption, MACHINEKEY_DecryptionKey, MACHINEKEY_ValidationKeyen MACHINEKEY_Validation.

De nieuwe sleutels bij elke herstart kunnen ASP.NET formulierverificatie opnieuw instellen en de status weergeven, als uw app hiervan afhankelijk is. Als u wilt voorkomen dat sleutels automatisch worden gegenereerd, stelt u deze handmatig in als App Service-app-instellingen.

Verbinding maken met de container

Als u rechtstreeks verbinding wilt maken met uw Windows-container voor diagnostische taken, gaat u naar https://<app-name>.scm.azurewebsites.net/ en selecteert u de SSH-optie. Met deze optie maakt u een directe SSH-sessie waarin u opdrachten in uw container kunt uitvoeren.

  • Het werkt afzonderlijk van de grafische browser erboven, waarbij alleen de bestanden in uw gedeelde opslag worden weergegeven.
  • In een uitgeschaalde app maakt de SSH-sessie verbinding met een van de containerinstanties. U kunt een andere instantie selecteren in de vervolgkeuzelijst Exemplaar in het bovenste Kudu-menu.
  • Met uitzondering van wijzigingen in de gedeelde opslag blijft elke wijziging die u in de container in de SSH-sessie aanbrengt , niet behouden wanneer uw app opnieuw wordt opgestart. Deze wijzigingen maken geen deel uit van de Docker-image. Als u wijzigingen wilt behouden, zoals registerinstellingen en software-installatie, maakt u deze deel uit van het Dockerfile.

Toegang tot diagnostische logboeken

App Service registreert acties van de Docker-host en -activiteiten vanuit de container. Logboeken van de Docker-host (platformlogboeken) zijn standaard ingeschakeld. U moet toepassingslogboeken of webserverlogboeken handmatig inschakelen vanuit de container. Zie Logboekregistratie van toepassingen inschakelen en webserverlogboeken inschakelen voor meer informatie.

U hebt op verschillende manieren toegang tot Docker-logboeken:

Azure Portal

Docker-logboeken worden weergegeven in Azure Portal in het deelvenster Containerinstellingen van uw app. De logboeken worden ingekort. Als u alle logboeken wilt downloaden, selecteert u Downloaden.

Kudu

Als u de afzonderlijke logboekbestanden wilt zien, gaat u naar https://<app-name>.scm.azurewebsites.net/DebugConsole en selecteert u de LogFiles map. Als u de hele LogFiles map wilt downloaden, selecteert u het pictogram Downloaden links van de mapnaam. U kunt deze map ook openen met behulp van een FTP-client.

Standaard hebt u geen toegang tot de C:\home\LogFiles map in de SSH-terminal omdat permanente gedeelde opslag niet is ingeschakeld. Schakel permanente gedeelde opslag in om dit gedrag in te schakelen in de consoleterminal.

Als u probeert het Docker-logboek te downloaden dat momenteel wordt gebruikt met behulp van een FTP-client, krijgt u mogelijk een foutmelding vanwege een bestandsvergrendeling.

Kudu-API

Ga rechtstreeks naar https://<app-name>.scm.azurewebsites.net/api/logs/docker om de metadata voor de Docker-logs te bekijken. Mogelijk ziet u meer dan één logboekbestand. U kunt de href eigenschap gebruiken om het logboekbestand rechtstreeks te downloaden.

Als u alle logboeken samen in één ZIP-bestand wilt downloaden, opent u .https://<app-name>.scm.azurewebsites.net/api/logs/docker/zip

Containergeheugen aanpassen

Standaard zijn voor alle Windows-containers die zijn geïmplementeerd in Azure App Service een geheugenlimiet geconfigureerd. De volgende tabel bevat de standaardinstellingen per App Service-plan-SKU.

App Service-plan-SKU Standaardgeheugenlimiet per app (in MB)
P1v3 1024
P1Mv3 1024
P2v3 1536
P2Mv3 1536
P3v3 2048
P3Mv3 2048
P4Mv3 2560
P5Mv3 3072

U kunt deze waarde wijzigen door de app-instelling WEBSITE_MEMORY_LIMIT_MB op te geven in Cloud Shell. Gebruik in Bash de volgende opdracht:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_MEMORY_LIMIT_MB=2000

Gebruik in PowerShell de volgende opdracht:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_MEMORY_LIMIT_MB"=2000}

De waarde wordt gedefinieerd in megabytes (MB) en moet kleiner en gelijk zijn aan het totale fysieke geheugen van de host. In een App Service-plan met 8 GB RAM kan het cumulatieve totaal voor WEBSITE_MEMORY_LIMIT_MB alle apps bijvoorbeeld niet groter zijn dan 8 GB. Zie het Premium v3-serviceabonnement in app serviceprijzen voor meer informatie over hoeveel geheugen er beschikbaar is.

Het aantal rekenkernen aanpassen

Standaard wordt een Windows-container uitgevoerd met alle beschikbare kernen voor uw prijscategorie. Mogelijk wilt u het aantal kernen verminderen dat door uw staging-site wordt gebruikt. Als u het aantal kernen wilt verminderen dat door een container wordt gebruikt, stelt u de WEBSITE_CPU_CORES_LIMIT app-instelling in op het gewenste aantal kernen. U kunt deze instellen met behulp van Cloud Shell. Gebruik in Bash de volgende opdracht:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --slot staging --settings WEBSITE_CPU_CORES_LIMIT=1

Gebruik in PowerShell de volgende opdracht:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_CPU_CORES_LIMIT"=1}

Aanbeveling

Het bijwerken van de app-instelling activeert automatisch opnieuw opstarten, wat minimale downtime veroorzaakt. Voor een productie-app kunt u overwegen deze te verwisselen in een staging-slot. Wijzig de app-instelling in de staging-slot en wissel deze vervolgens terug naar productie.

Als u uw aangepaste nummer wilt controleren, opent u een SSH-sessie met behulp van Azure Portal of de Kudu-portal (https://<app-name>.scm.azurewebsites.net/webssh/host). Voer de volgende opdrachten in met behulp van PowerShell. Elke opdracht retourneert een getal.

Get-ComputerInfo | ft CsNumberOfLogicalProcessors # Total number of enabled logical processors. Disabled processors are excluded.
Get-ComputerInfo | ft CsNumberOfProcessors # Number of physical processors.

De processors kunnen multicore- of hyperthreadingprocessors zijn. Zie het Premium v3-serviceabonnement in de Prijzen van App Service voor meer informatie over hoeveel kernen er beschikbaar zijn.

Gedrag van status ping aanpassen

App Service beschouwt een container als succesvol gestart wanneer de container start en reageert op een HTTP-ping. De aanvraag voor status ping bevat de header User-Agent= "App Service Hyper-V Container Availability Check". Als de container wordt gestart maar na een bepaalde tijd niet reageert op pings, registreert App Service een gebeurtenis in het Docker-logboek.

Als uw toepassing resource-intensief is, reageert de container mogelijk niet tijdig op de HTTP-ping. Als u wilt bepalen wat er gebeurt wanneer HTTP-pings mislukken, stelt u de CONTAINER_AVAILABILITY_CHECK_MODE app-instelling in. U kunt deze instellen met behulp van Cloud Shell. Gebruik in Bash de volgende opdracht:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings CONTAINER_AVAILABILITY_CHECK_MODE="ReportOnly"

Gebruik in PowerShell de volgende opdracht:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"CONTAINER_AVAILABILITY_CHECK_MODE"="ReportOnly"}

In de volgende tabel ziet u de mogelijke waarden:

Waarde Description
Repair Start de container opnieuw op na drie opeenvolgende beschikbaarheidscontroles.
ReportOnly De standaardwaarde. Rapporteer de container in de Docker-logboeken na drie opeenvolgende beschikbaarheidscontroles, maar start deze niet opnieuw op.
Off Controleer niet op beschikbaarheid.

Ondersteuning voor door groepen beheerde serviceaccounts

Door groepen beheerde serviceaccounts worden niet ondersteund in Windows-containers in App Service.

SSH inschakelen

U kunt Secure Shell (SSH) gebruiken om beheeropdrachten op afstand uit te voeren vanuit een opdrachtregelterminal. Voer de volgende stappen uit om de SSH-consolefunctie van Azure Portal in te schakelen met aangepaste containers:

  1. Maak een standaardbestand sshd_config met de volgende voorbeeldinhoud en plaats het in de hoofdmap van het toepassingsproject:

    Port 			2222
    ListenAddress 		0.0.0.0
    LoginGraceTime 		180
    X11Forwarding 		yes
    Ciphers aes128-cbc,3des-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr
    MACs hmac-sha1,hmac-sha1-96
    StrictModes 		yes
    SyslogFacility 		DAEMON
    PasswordAuthentication 	yes
    PermitEmptyPasswords 	no
    PermitRootLogin 	yes
    Subsystem sftp internal-sftp
    

    Notitie

    Dit bestand configureert OpenSSH en moet de volgende items bevatten om te voldoen aan de SSH-functie van Azure Portal:

    • De Port waarde moet worden ingesteld op 2222.
    • De Ciphers waarden moeten ten minste één item in deze lijst bevatten: aes128-cbc, 3des-cbcof aes256-cbc.
    • De MACs waarden moeten ten minste één item in deze lijst bevatten: hmac-sha1 of hmac-sha1-96.
  2. Maak een invoerpuntscript met de naam entrypoint.sh of wijzig een bestaand invoerpuntbestand. Voeg de opdracht toe om de SSH-service te starten, samen met de opstartopdracht van de toepassing. In het volgende voorbeeld ziet u hoe u een Python-toepassing start. Vervang de laatste opdracht volgens de projecttaal of stack:

    #!/bin/sh
    set -e
    service ssh start
    exec gunicorn -w 4 -b 0.0.0.0:8000 app:app
    
  3. Voeg de volgende instructies toe aan de Dockerfile volgens de distributie van de basisafbeelding. Met deze instructies kopieert u de nieuwe bestanden, installeert u de OpenSSH-server, stelt u de juiste machtigingen in en configureert u het aangepaste toegangspunt en stelt u de poorten beschikbaar die zijn vereist voor de toepassing en de SSH-server, respectievelijk:

    COPY entrypoint.sh ./
    
    # Start and enable SSH
    RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get install -y --no-install-recommends openssh-server \
        && echo "root:Docker!" | chpasswd \
        && chmod u+x ./entrypoint.sh
    COPY sshd_config /etc/ssh/
    
    EXPOSE 8000 2222
    
    ENTRYPOINT [ "./entrypoint.sh" ] 
    

    Notitie

    Het hoofdwachtwoord moet precies Docker! zijn omdat App Service dit gebruikt om u toegang te verlenen tot de SSH-sessie met de container. Deze configuratie staat geen externe verbindingen naar de container toe. De poort 2222 van de container is alleen toegankelijk binnen het brugnetwerk van een particulier virtueel netwerk. Een aanvaller op internet heeft er geen toegang toe.

  4. Bouw de Docker-installatiekopieën opnieuw en push deze naar het register en test vervolgens de functie Web App SSH in Azure Portal.

Zie de Azure App Service-blog: SSH inschakelen in een Linux-web-app voor containers voor meer informatie over het oplossen van problemen.

Toegang tot diagnostische logboeken

U hebt toegang tot de consolelogboeken die worden gegenereerd vanuit de container.

Voer de volgende opdracht uit om containerlogboekregistratie in te schakelen:

az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem

Vervang de <app-name> en <resource-group-name> waarden door namen die geschikt zijn voor uw web-app.

Nadat u containerlogboekregistratie hebt ingeschakeld, voert u de volgende opdracht uit om de logboekstream te zien:

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

Als consolelogboeken niet onmiddellijk worden weergegeven, controleert u het na 30 seconden opnieuw.

Als u het streamen van logboeken op elk gewenst moment wilt stoppen, gebruikt u de sneltoets Ctrl+C.

Apps met meerdere containers configureren

Notitie

De Docker Compose-functie wordt op 31 maart 2027 buiten gebruik gesteld. Sidecar-containers vervangen apps met meerdere containers in App Service. Voor nieuwe services, zie Tutorial: Configureer een sidecar-container voor een aangepaste container in Azure App Service. Zie Uw Docker Compose-toepassingen migreren naar de sidecar-functie voor bestaande apps met meerdere containers in App Service.

Permanente opslag gebruiken in Docker Compose

Apps met meerdere containers, zoals WordPress, hebben permanente opslag nodig om goed te kunnen functioneren. Als u permanente opslag wilt inschakelen, moet uw Docker Compose-configuratie verwijzen naar een opslaglocatie buiten uw container. Opslaglocaties in uw container behouden geen wijzigingen na het opnieuw opstarten van de app.

Als u permanente opslag wilt inschakelen, stelt u de WEBSITES_ENABLE_APP_SERVICE_STORAGE app-instelling in. Gebruik de az webapp config appsettings set opdracht in Cloud Shell.

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE

Wijs in het docker-compose.yml bestand de volumes optie toe aan ${WEBAPP_STORAGE_HOME}.

WEBAPP_STORAGE_HOME is een omgevingsvariabele in App Service die is toegewezen aan permanente opslag voor uw app. Voorbeeld:

wordpress:
  image: <image name:tag>
  volumes:
  - "${WEBAPP_STORAGE_HOME}/site/wwwroot:/var/www/html"
  - "${WEBAPP_STORAGE_HOME}/phpmyadmin:/var/www/phpmyadmin"
  - "${WEBAPP_STORAGE_HOME}/LogFiles:/var/log"

Preview-beperkingen

De multi-container functie is momenteel in preview. De volgende App Service-platformfuncties worden niet ondersteund:

  • Authenticatie of autorisatie.
  • Beheerde identiteiten.
  • CORS (Cross-Origin Resource Sharing) is een methode voor het delen van resources tussen verschillende oorsprongsbronnen.
  • Integratie van virtuele netwerken met Docker Compose-scenario's.

Docker Compose in Azure App Service heeft momenteel een limiet van 4000 tekens.

Docker Compose opties

In de volgende secties worden ondersteunde en niet-ondersteunde configuratieopties voor Docker Compose weergegeven.

Ondersteunde opties

Niet-ondersteunde opties

  • build (niet toegestaan)
  • depends_on (genegeerd)
  • networks (genegeerd)
  • secrets (genegeerd)
  • Andere poorten dan 80 en 8080 (genegeerd)
  • Standaardomgevingsvariabelen zoals $variable en ${variable} (in tegenstelling tot in Docker)

Syntaxisbeperkingen

  • De eerste YAML-instructie in het bestand moet altijd zijn version x.x.
  • De sectie poorten moet getallen tussen aanhalingstekens gebruiken.
  • De image > volume sectie moet worden geciteerd en mag geen machtigingsdefinities hebben.
  • In de volumes-sectie mag geen lege accolade achter de volumenaam staan.

Notitie

Alle andere opties die niet expliciet worden vermeld, worden genegeerd in de preview-versie.

Het robots933456-bericht negeren in logboeken

Mogelijk ziet u het volgende bericht in de containerlogboeken:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

U kunt dit bericht veilig negeren. /robots933456.txt is een dummy-URL-pad. App Service gebruikt deze om te controleren of de container aanvragen kan verwerken. Een '404'-foutantwoord geeft aan dat het pad niet bestaat en geeft aan App Service aan dat de container in orde is en gereed is om te reageren op aanvragen.