Delen via


Overzicht van Python Container Apps in Azure

In dit artikel wordt beschreven hoe u van Python-projectcode (bijvoorbeeld een web-app) naar een geïmplementeerde Docker-container in Azure gaat. Besproken zijn het algemene proces van containerisatie, implementatieopties voor containers in Azure en python-specifieke configuratie van containers in Azure.

De aard van Docker-containers is dat het maken van een Docker-installatiekopieën van code en het implementeren van die installatiekopieën in een container in Azure vergelijkbaar is met programmeertalen. De taalspecifieke overwegingen , Python in dit geval, bevinden zich in de configuratie tijdens het containerisatieproces in Azure, met name de Dockerfile-structuur en -configuratie die ondersteuning bieden voor Python-webframeworks zoals Django, Flask en FastAPI.

Scenario's voor containerwerkstroom

Voor het ontwikkelen van Python-containers zijn enkele typische werkstromen voor het verplaatsen van code naar container:

Scenario Beschrijving Werkstroom
Dev Bouw Python Docker-installatiekopieën in uw ontwikkelomgeving. Code: git clone code to dev environment (met Docker geïnstalleerd).

Build: Gebruik Docker CLI, VS Code (met extensies), PyCharm (met invoegtoepassing). Beschreven in de sectie Werken met Python Docker-installatiekopieën en -containers.

Test: In een ontwikkelomgeving in een Docker-container.

Push: Naar een register zoals Azure Container Registry, Docker Hub of privéregister.

Implementeren: naar Azure-service vanuit het register.
Hybride Bouw vanuit uw ontwikkelomgeving Python Docker-installatiekopieën in Azure. Code: git klooncode naar ontwikkelomgeving (niet nodig om Docker te installeren).

Build: VS Code (met extensies), Azure CLI.

Pushen: naar Azure Container Registry

Implementeren: naar Azure-service vanuit het register.
Azure Alles in de cloud; Gebruik Azure Cloud Shell om Code voor Python Docker-installatiekopieën te bouwen vanuit gitHub-opslagplaats. Code: Git Clone GitHub-opslagplaats naar Azure Cloud Shell.

Build: Gebruik Azure CLI of Docker CLI in Azure Cloud Shell.

Push: Naar register, zoals Azure Container Registry, Docker Hub of privéregister.

Implementeren: naar Azure-service vanuit het register.

Het einddoel van deze werkstromen is om een container te laten uitvoeren in een van de Azure-resources die Docker-containers ondersteunen, zoals wordt vermeld in de volgende sectie.

Een ontwikkelomgeving kan uw lokale werkstation zijn met Visual Studio Code of PyCharm, Codespaces (een ontwikkelomgeving die wordt gehost in de cloud) of Visual Studio Dev Containers (een container als een ontwikkelomgeving).

Implementatiecontaineropties in Azure

Python-container-apps worden ondersteund in de volgende services.

Service Beschrijving
Web App for Containers Een volledig beheerde hostingservice voor in containers geplaatste webtoepassingen, waaronder websites en web-API's. In containers geplaatste web-apps in Azure-app Service kunnen naar behoefte worden geschaald en gestroomlijnde CI/CD-werkstromen worden gebruikt met Docker Hub, Azure Container Registry en GitHub. Ideaal als een eenvoudige on-ramp voor ontwikkelaars om te profiteren van het volledig beheerde Azure-app Service-platform, maar die ook één implementeerbaar artefact met een app en alle bijbehorende afhankelijkheden willen.

Voorbeeld: Een Flask- of FastPI-web-app implementeren in Azure-app Service.
Azure Container Apps (ACA) Een volledig beheerde serverloze containerservice, mogelijk gemaakt door Kubernetes en opensource-technologieën zoals Dapr, KEDA en envoy. Op basis van best practices en geoptimaliseerd voor containers voor algemeen gebruik. De clusterinfrastructuur wordt beheerd door ACA en directe toegang tot de Kubernetes-API wordt niet ondersteund. Biedt veel toepassingsspecifieke concepten boven op containers, waaronder certificaten, revisies, schaal en omgevingen. Ideaal voor teams die willen beginnen met het bouwen van containermicroservices zonder dat ze de onderliggende complexiteit van Kubernetes hoeven te beheren.

Voorbeeld: Een Flask- of FastPI-web-app implementeren in Azure Container Apps.
Azure Container Instances (ACI) Een serverloze aanbieding die één pod van geïsoleerde Hyper-V-containers op aanvraag biedt. Gefactureerd voor verbruik in plaats van ingerichte resources. Concepten zoals schalen, taakverdeling en certificaten worden niet geleverd met ACI-containers. Gebruikers communiceren vaak met ACI via andere services; Bijvoorbeeld AKS voor indeling. Ideaal als u een minder 'gedoorde' bouwsteen nodig hebt die niet overeenkomt met de scenario's waarvoor Azure Container Apps wordt geoptimaliseerd.

Voorbeeld: Een containerinstallatiekopieën maken voor implementatie in Azure Container Instances. (De zelfstudie is niet specifiek voor Python, maar de concepten die worden weergegeven, zijn van toepassing op alle talen.)
Azure Kubernetes Service (AKS) Een volledig beheerde Kubernetes-optie in Azure. Ondersteunt directe toegang tot de Kubernetes-API en voert een Kubernetes-workload uit. Het volledige cluster bevindt zich in uw abonnement, met de clusterconfiguraties en -bewerkingen binnen uw beheer en verantwoordelijkheid. Ideaal voor teams die op zoek zijn naar een volledig beheerde versie van Kubernetes in Azure.

Voorbeeld: Een Azure Kubernetes Service-cluster implementeren met behulp van de Azure CLI.
Azure Functions Een gebeurtenisgestuurde, serverloze faas-oplossing (functions-as-a-service). Deelt veel kenmerken met Azure Container Apps op schaal en integratie met gebeurtenissen, maar is geoptimaliseerd voor tijdelijke functies die zijn geïmplementeerd als code of containers. Ideaal voor teams die de uitvoering van functies op gebeurtenissen willen activeren; Als u bijvoorbeeld verbinding wilt maken met andere gegevensbronnen.

Voorbeeld: Een functie maken in Linux met behulp van een aangepaste container.

Zie Container Apps vergelijken met andere Azure-containeropties voor een gedetailleerdere vergelijking van deze services.

Virtuele omgevingen en containers

Wanneer u een Python-project uitvoert in een ontwikkelomgeving, is het gebruik van een virtuele omgeving een veelgebruikte manier om afhankelijkheden te beheren en de reproduceerbaarheid van uw projectinstallatie te garanderen. In een virtuele omgeving is een Python-interpreter, -bibliotheken en -scripts geïnstalleerd die vereist zijn voor de projectcode die in die omgeving wordt uitgevoerd. Afhankelijkheden voor Python-projecten worden beheerd via het bestand requirements.txt .

Tip

Met containers zijn virtuele omgevingen niet nodig, tenzij u ze gebruikt om tests of andere redenen. Als u virtuele omgevingen gebruikt, kopieert u deze niet naar de Docker-installatiekopie. Gebruik het .dockerignore-bestand om ze uit te sluiten.

U kunt Docker-containers beschouwen als vergelijkbare mogelijkheden als virtuele omgevingen, maar met verdere voordelen in reproduceerbaarheid en draagbaarheid. Docker-container kan overal worden uitgevoerd, ongeacht het besturingssysteem.

Een Docker-container bevat uw Python-projectcode en alles wat code moet uitvoeren. Om dat punt te bereiken, moet u uw Python-projectcode bouwen in een Docker-installatiekopieën en vervolgens een container maken, een uitvoerbare instantie van die installatiekopieën.

Voor het containeriseren van Python-projecten zijn de belangrijkste bestanden:

Projectbestand Beschrijving
requirements.txt Wordt gebruikt tijdens het bouwen van de Docker-installatiekopieën om de juiste afhankelijkheden in de installatiekopieën op te halen.
Dockerfile Wordt gebruikt om op te geven hoe u de Python Docker-installatiekopieën bouwt. Zie de sectie Dockerfile-instructies voor Python voor meer informatie.
.dockerignore Bestanden en mappen in .dockerignore worden niet gekopieerd naar de Docker-installatiekopie met de COPY opdracht in het Dockerfile. Het .dockerignore-bestand ondersteunt uitsluitingspatronen die vergelijkbaar zijn met .gitignore-bestanden . Zie .dockerignore-bestand voor meer informatie.

Het uitsluiten van bestanden helpt bij het bouwen van afbeeldingen, maar moet ook worden gebruikt om te voorkomen dat gevoelige informatie wordt toegevoegd aan de afbeelding waar deze kan worden gecontroleerd. De .dockerignore moet bijvoorbeeld regels bevatten om .env en .venv (virtuele omgevingen) te negeren.

Containerinstellingen voor webframeworks

Webframeworks hebben standaardpoorten waarop ze luisteren naar webaanvragen. Wanneer u met een aantal Azure-containeroplossingen werkt, moet u opgeven op welke poort uw container luistert die verkeer ontvangt.

Webframework Poort
Django 8000
Flask 5000 of 5002
FastAPI (uvicorn) 8000 of 80

In de volgende tabel ziet u hoe u de poort instelt voor verschillende Azure-containeroplossingen.

Azure-containeroplossing Poort voor web-apps instellen
Web App for Containers Standaard wordt ervan uitgegaan dat uw aangepaste container luistert op poort 80 of poort 8080. Als uw container naar een andere poort luistert, stelt u de WEBSITES_PORT app-instelling in uw App Service-app in. Zie Een aangepaste container configureren voor Azure-app Service voor meer informatie.
Azure Containers-apps Met Azure Container Apps kunt u uw container-app beschikbaar maken voor het openbare web, uw VNET of andere container-apps in uw omgeving door inkomend verkeer in te schakelen. Stel het toegangsbeheerobject targetPort in op de poort waar uw container naar luistert voor binnenkomende aanvragen. Eindpunt voor inkomend verkeer van toepassingen wordt altijd weergegeven op poort 443. Zie HTTPS- of TCP-toegangsbeheerobjecten instellen in Azure Container Apps voor meer informatie.
Azure Container Instances, Azure Kubernetes Stel de poort in tijdens het maken van een container. U moet ervoor zorgen dat uw oplossing een webframework, toepassingsserver (bijvoorbeeld gunicorn, uvicorn) en webserver (bijvoorbeeld nginx) heeft. U kunt bijvoorbeeld twee containers maken, één container met een webframework en toepassingsserver en een ander framework met een webserver. De twee containers communiceren op één poort en de webservercontainer geeft 80/443 weer voor externe aanvragen.

Python Dockerfile

Een Dockerfile is een tekstbestand dat instructies bevat voor het bouwen van een Docker-installatiekopieën. De eerste regel geeft aan dat de basisinstallatiekopie begint. Deze regel wordt gevolgd door instructies voor het installeren van vereiste programma's, het kopiëren van bestanden en andere instructies voor het maken van een werkomgeving. Enkele Python-specifieke voorbeelden voor belangrijke Python Dockerfile-instructies worden bijvoorbeeld weergegeven in de onderstaande tabel.

Instructie Doel Opmerking
VAN Hiermee stelt u de basisinstallatiekopieën in voor volgende instructies. FROM python:3.8-slim
BLOOT Vertelt Docker dat de container tijdens runtime luistert op de opgegeven netwerkpoorten. EXPOSE 5000
KOPIËREN Kopieert bestanden of mappen van de opgegeven bron en voegt deze toe aan het bestandssysteem van de container op het opgegeven doelpad. COPY . /app
UITVOEREN Voert een opdracht uit in de Docker-installatiekopieën. Haal bijvoorbeeld afhankelijkheden op. De opdracht wordt eenmaal uitgevoerd tijdens het bouwen. RUN python -m pip install -r requirements.txt
CMD De opdracht biedt de standaardinstelling voor het uitvoeren van een container. Er kan slechts één CMD-instructie zijn. CMD ["gunicorn", "--bind", "0.0.0.0:5000", "wsgi:app"]

Met de Docker-buildopdracht worden Docker-installatiekopieën gebouwd vanuit een Dockerfile en een context. De context van een build is de set bestanden die zich in het opgegeven pad of de opgegeven URL bevinden. Normaal gesproken bouwt u een installatiekopieën uit de hoofdmap van uw Python-project en is het pad voor de buildopdracht '', zoals wordt weergegeven in het volgende voorbeeld.

docker build --rm --pull  --file "Dockerfile"  --tag "mywebapp:latest"  .

Het buildproces kan verwijzen naar een van de bestanden in de context. Uw build kan bijvoorbeeld een COPY-instructie gebruiken om te verwijzen naar een bestand in de context. Hier volgt een voorbeeld van een Dockerfile voor een Python-project met behulp van het Flask-framework :

FROM python:3.8-slim

EXPOSE 5000

# Keeps Python from generating .pyc files in the container.
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

# Install pip requirements.
COPY requirements.txt .
RUN python -m pip install -r requirements.txt

WORKDIR /app
COPY . /app

# Creates a non-root user with an explicit UID and adds permission to access the /app folder.
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser

# Provides defaults for an executing container; can be overridden with Docker CLI.
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "wsgi:app"]

U kunt handmatig een Dockerfile maken of automatisch maken met VS Code en de Docker-extensie. Zie Docker-bestanden genereren voor meer informatie.

De Docker-buildopdracht maakt deel uit van de Docker CLI. Wanneer u IDE's zoals VS Code of PyCharm gebruikt, roepen de UI-opdrachten voor het werken met Docker-installatiekopieën de buildopdracht voor u aan en automatiseren het opgeven van opties.

Werken met Python Docker-installatiekopieën en -containers

VS Code en PyCharm

Het werken in een IDE (Integrated Development Environment) voor het ontwikkelen van Python-containers is niet nodig, maar kan veel taken met betrekking tot containers vereenvoudigen. Hier volgen enkele van de dingen die u kunt doen met VS Code en PyCharm.

  • Docker-installatiekopieën downloaden en bouwen.

    • Bouw installatiekopieën in uw ontwikkelomgeving.
    • Bouw Docker-installatiekopieën in Azure zonder Docker geïnstalleerd in de ontwikkelomgeving. (Voor PyCharm gebruikt u de Azure CLI om installatiekopieën te bouwen in Azure.)
  • Docker-containers maken en uitvoeren vanuit een bestaande installatiekopie, een pull-installatiekopie of rechtstreeks vanuit een Dockerfile.

  • Voer toepassingen met meerdere containers uit met Docker Compose.

  • Verbinding maken en werken met containerregisters zoals Docker Hub, GitLab, JetBrains Space, Docker V2 en andere zelf-hostende Docker-registers.

  • (alleen VS Code) Voeg een Dockerfile - en Docker Compose-bestanden toe die zijn afgestemd op uw Python-project.

Als u VS Code en PyCharm wilt instellen om Docker-containers uit te voeren in uw ontwikkelomgeving, gebruikt u de volgende stappen.

Als u dat nog niet hebt gedaan, installeert u Azure Tools voor VS Code.

Instructies Schermafbeelding
Stap 1: Gebruik Shift + Alt + A om de Azure-extensie te openen en te bevestigen dat u bent verbonden met Azure.

U kunt ook het Azure-pictogram selecteren op de balk met VS Code-extensies.

Als u niet bent aangemeld, selecteert u Aanmelden bij Azure en volgt u de aanwijzingen.

Als u problemen ondervindt bij het openen van uw Azure-abonnement, kan dit komen doordat u zich achter een proxy bevindt. Zie Network Verbinding maken ions in Visual Studio Code om verbindingsproblemen op te lossen.
Screenshot showing how Azure Tools looks once signed in.Screenshot showing how Azure Tools looks if you aren't signed in.
Stap 2: Gebruik Ctrl + Shift + X om extensies te openen, te zoeken naar de Docker-extensie en de extensie te installeren.

U kunt ook het pictogram Extensies selecteren op de balk met VS Code-extensies .
Screenshot showing how to add Docker extension to VS Code.
Stap 3: Selecteer het Docker-pictogram in de extensiebalk, vouw installatiekopieën uit en klik met de rechtermuisknop op een installatiekopieën die als een container worden uitgevoerd. Screenshot showing how to use the Docker extension in VS Code to run a container from a Docker image.
Stap 4: Bewaak de Uitvoer van Docker in het Terminal-venster . Screenshot showing an example of running a container in VS Code.

Azure CLI en Docker CLI

U kunt ook werken met Python Docker-installatiekopieën en -containers met behulp van de Azure CLI en Docker CLI. Zowel VS Code als PyCharm hebben terminals waar u deze CLIs kunt uitvoeren.

Gebruik een CLI als u meer controle wilt over opbouw- en uitvoeringsargumenten en voor automatisering. De volgende opdracht laat bijvoorbeeld zien hoe u de Azure CLI az acr build gebruikt om de naam van de Docker-installatiekopieën op te geven.

az acr build --registry <registry-name> \
  --resource-group <resource-group> \
  --target pythoncontainerwebapp:latest .

Bekijk als een ander voorbeeld de volgende opdracht die laat zien hoe u de Docker CLI-run-opdracht gebruikt. In het voorbeeld ziet u hoe u een Docker-container uitvoert die communiceert met een MongoDB-exemplaar in uw ontwikkelomgeving, buiten de container. De verschillende waarden voor het voltooien van de opdracht zijn gemakkelijker te automatiseren wanneer deze zijn opgegeven in een opdrachtregel.

docker run --rm -it \
  --publish <port>:<port> --publish 27017:27017 \
  --add-host mongoservice:<your-server-IP-address> \
  --env CONNECTION_STRING=mongodb://mongoservice:27017 \
  --env DB_NAME=<database-name> \
  --env COLLECTION_NAME=<collection-name> \
  containermongo:latest  

Zie Een in een container geplaatste Python-web-app lokaal bouwen en testen voor meer informatie over dit scenario.

Omgevingsvariabelen in containers

Python-projecten maken vaak gebruik van omgevingsvariabelen om gegevens door te geven aan code. U kunt bijvoorbeeld databaseverbindingsgegevens opgeven in een omgevingsvariabele, zodat deze tijdens het testen eenvoudig kan worden gewijzigd. Als u het project implementeert in productie, kan de databaseverbinding ook worden gewijzigd om te verwijzen naar een exemplaar van een productiedatabase.

Pakketten zoals python-dotenv worden vaak gebruikt om sleutel-waardeparen uit een .env-bestand te lezen en in te stellen als omgevingsvariabelen. Een .env-bestand is handig bij het uitvoeren in een virtuele omgeving, maar wordt niet aanbevolen bij het werken met containers. Kopieer het .env-bestand niet naar de Docker-installatiekopie, met name als het gevoelige informatie bevat en de container openbaar wordt gemaakt. Gebruik het .dockerignore-bestand om bestanden uit te sluiten van het kopiëren naar de Docker-installatiekopie. Zie de sectie Virtuele omgevingen en containers in dit artikel voor meer informatie.

U kunt omgevingsvariabelen op een aantal manieren doorgeven aan containers:

  1. Gedefinieerd in het Dockerfile als ENV-instructies .
  2. Doorgegeven als --build-arg argumenten met de opdracht Docker-build.
  3. Doorgegeven als --secret argumenten met de Docker-buildopdracht en buildKit-back-end .
  4. Doorgegeven als --env of --env-file argumenten met de opdracht Docker-run.

De eerste twee opties hebben hetzelfde nadeel als hierboven aangegeven met .env-bestanden , namelijk dat u mogelijk gevoelige informatie in een Docker-installatiekopieën coderen. U kunt een Docker-installatiekopieën inspecteren en de omgevingsvariabelen bekijken, bijvoorbeeld met de opdracht-docker-installatiekopieën inspecteren.

Met de derde optie met BuildKit kunt u geheime informatie doorgeven die moet worden gebruikt in het Dockerfile voor het bouwen van Docker-installatiekopieën op een veilige manier die niet in de uiteindelijke installatiekopieën wordt opgeslagen.

De vierde optie voor het doorgeven van omgevingsvariabelen met de Opdracht Docker-run betekent dat de Docker-installatiekopieën de variabelen niet bevatten. De variabelen zijn echter nog steeds zichtbaar voor het inspecteren van het containerexemplaren (bijvoorbeeld met docker-container inspecteren). Deze optie kan acceptabel zijn wanneer de toegang tot de containerinstantie wordt beheerd of in test- of ontwikkelscenario's.

Hier volgt een voorbeeld van het doorgeven van omgevingsvariabelen met behulp van de Docker CLI-run-opdracht en het --env argument.

# PORT=8000 for Django and 5000 for Flask
export PORT=<port-number>

docker run --rm -it \
  --publish $PORT:$PORT \
  --env CONNECTION_STRING=<connection-info> \
  --env DB_NAME=<database-name> \
  <dockerimagename:tag>

Als u VS Code of PyCharm gebruikt, gebruiken de UI-opties voor het werken met installatiekopieën en containers uiteindelijk Docker CLI-opdrachten, zoals hierboven wordt weergegeven.

Ten slotte is het opgeven van omgevingsvariabelen bij het implementeren van een container in Azure anders dan het gebruik van omgevingsvariabelen in uw ontwikkelomgeving. Voorbeeld:

  • Voor Web App for Containers configureert u toepassingsinstellingen tijdens de configuratie van App Service. Deze instellingen zijn beschikbaar voor uw app-code als omgevingsvariabelen en worden geopend met behulp van het standaardpatroon os.environ. U kunt waarden wijzigen na de eerste implementatie wanneer dat nodig is. Zie Instellingen van access-apps als omgevingsvariabelen voor meer informatie.

  • Voor Azure Container Apps configureert u omgevingsvariabelen tijdens de eerste configuratie van de container-app. Bij latere wijziging van omgevingsvariabelen wordt een revisie van de container gemaakt. Daarnaast kunt u met Azure Container Apps geheimen definiëren op toepassingsniveau en vervolgens ernaar verwijzen in omgevingsvariabelen. Zie Geheimen beheren in Azure Container Apps voor meer informatie.

Als een andere optie kunt u Service Verbinding maken or gebruiken om Azure Compute-services te verbinden met andere back-upservices. Deze service configureert de netwerkinstellingen en verbindingsgegevens (bijvoorbeeld het genereren van omgevingsvariabelen) tussen rekenservices en doelbackingservices in het beheervlak.

Containerlogboeken weergeven

Bekijk logboeken van containerinstanties om de uitvoer van diagnostische berichten van code te bekijken en om problemen in de code van uw container op te lossen. Hier volgen verschillende manieren waarop u logboeken kunt weergeven bij het uitvoeren van een container in uw ontwikkelomgeving:

  • Als u een container met VS Code of PyCharm uitvoert, zoals wordt weergegeven in de sectie VS Code en PyCharm, ziet u logboeken in terminalvensters die worden geopend wanneer Docker wordt uitgevoerd.

  • Als u de docker CLI-opdracht uitvoert met de interactieve vlag -it, ziet u uitvoer na de opdracht.

  • In Docker Desktop kunt u ook logboeken voor een actieve container bekijken.

Wanneer u een container in Azure implementeert, hebt u ook toegang tot containerlogboeken. Hier volgen verschillende Azure-services en hoe u toegang hebt tot containerlogboeken in Azure Portal.

Azure-service Logboeken openen in Azure Portal
Web App for Containers Ga naar de resource Problemen vaststellen en oplossen om logboeken weer te geven. Diagnostische gegevens zijn een intelligente en interactieve ervaring waarmee u problemen met uw app kunt oplossen zonder dat er configuratie is vereist. Voor een realtime weergave van logboeken gaat u naar de bewakingslogboekstream - . Zie de andere resources onder Bewaking voor meer gedetailleerde logboekquery's en configuraties.
Azure Container Apps Ga naar de omgevingsresource Diagnose en los problemen op om omgevingsproblemen op te lossen. Vaker wilt u containerlogboeken bekijken. Selecteer in de containerresource onder Toepassingsrevisiebeheer - de revisie en daar kunt u systeem- en consolelogboeken bekijken. Zie de resources onder Bewaking voor meer gedetailleerde logboekquery's en configuraties.
Azure Container Instances Ga naar de containerresource en selecteer Logboeken.

Voor dezelfde services die hierboven worden vermeld, zijn dit de Azure CLI-opdrachten voor toegang tot logboeken.

Azure-service Azure CLI-opdracht voor toegang tot logboeken
Web App for Containers az webapp log
Azure Container Apps az containerapps logs
Azure Container Instances az container logs

Er is ook ondersteuning voor het weergeven van logboeken in VS Code. U moet Azure Tools voor VS Code hebben geïnstalleerd. Hieronder ziet u een voorbeeld van het weergeven van Web Apps for Containers-logboeken (App Service) in VS Code.

Screenshot showing how to view logs in VS Code for Web Apps for Containers.

Volgende stappen