Delen via


Een in een container geplaatste Flask- of FastAPI-web-app implementeren in Azure-app Service

In deze zelfstudie leert u hoe u een Python Flask- of FastAPI-web-app implementeert in Azure-app Service met behulp van de functie Web App for Containers. Web App for Containers biedt ontwikkelaars een eenvoudige on-ramp 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. Zie Azure-containeropties vergelijken voor meer informatie over het gebruik van containers in Azure.

In deze zelfstudie gebruikt u de Docker CLI en Docker om eventueel een Docker-installatiekopieën te maken en deze lokaal te testen. U gebruikt de Azure CLI om een Docker-installatiekopieën te maken in een Azure Container Registry en deze te implementeren in Azure-app Service. De web-app is geconfigureerd met de door het systeem toegewezen beheerde identiteit (verbindingen zonder wachtwoord) en op rollen gebaseerde toegang van Azure om de Docker-installatiekopie uit azure Container Registry op te halen tijdens de implementatie. U kunt ook implementeren met Visual Studio Code , waarbij de Azure Tools-extensie is geïnstalleerd.

Zie Een Flask- of FastPI-web-app implementeren in Azure Container Apps voor een voorbeeld van het bouwen en maken van een Docker-installatiekopieën die moeten worden uitgevoerd in Azure Container Apps.

Notitie

In deze zelfstudie ziet u hoe u een Docker-installatiekopieën maakt die vervolgens in App Service kan worden uitgevoerd. Dit is niet vereist voor het gebruik van App Service. U kunt code rechtstreeks vanuit een lokale werkruimte implementeren in App Service zonder een Docker-installatiekopieën te maken. Zie quickstart: Een Python-web-app (Django of Flask) implementeren in Azure-app Service voor een voorbeeld.

Vereisten

U hebt het volgende nodig om deze zelfstudie te voltooien:

De voorbeeldcode halen

Haal de code op in uw lokale omgeving.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git
cd msdocs-python-flask-webapp-quickstart

Dockerfile- en .dockerignore-bestanden toevoegen

Voeg een Dockerfile toe om Docker te laten instrueren hoe u de installatiekopieën bouwt. Het Dockerfile specificeert het gebruik van Gunicorn, een webserver op productieniveau die webaanvragen doorstuurt naar de Flask- en FastAPI-frameworks. Met de OPDRACHTEN ENTRYPOINT en CMD wordt Gunicorn geïnstrueerd om aanvragen voor het app-object te verwerken.

# syntax=docker/dockerfile:1

FROM python:3.11

WORKDIR /code

COPY requirements.txt .

RUN pip3 install -r requirements.txt

COPY . .

EXPOSE 50505

ENTRYPOINT ["gunicorn", "app:app"]

50505 wordt in dit voorbeeld gebruikt voor de containerpoort (intern), maar u kunt elke gratis poort gebruiken.

Controleer het requirements.txt bestand om er zeker van te zijn dat het bestand bevat gunicorn.

Flask==2.2.2
gunicorn
Werkzeug==2.2.2

Voeg een .dockerignore-bestand toe om overbodige bestanden uit de installatiekopie uit te sluiten.

.git*
**/*.pyc
.venv/

Gunicorn configureren

Gunicorn kan worden geconfigureerd met een gunicorn.conf.py bestand. Wanneer het bestand gunicorn.conf.py zich in dezelfde map bevindt waarin gunicorn wordt uitgevoerd, hoeft u de locatie ervan niet op te geven in het Dockerfile. Zie Gunicorn-instellingen voor meer informatie over het opgeven van het configuratiebestand.

In deze zelfstudie configureert het voorgestelde configuratiebestand gunicorn om het aantal werkrollen te verhogen op basis van het aantal beschikbare CPU-kernen. Zie Gunicorn-configuratie voor meer informatie over gunicorn.conf.py bestandsinstellingen.

# Gunicorn configuration file
import multiprocessing

max_requests = 1000
max_requests_jitter = 50

log_file = "-"

bind = "0.0.0.0:50505"

workers = (multiprocessing.cpu_count() * 2) + 1
threads = workers

timeout = 120

De installatiekopieën lokaal bouwen en uitvoeren

Bouw de installatiekopieën lokaal.

docker build --tag flask-demo .

Notitie

Als de docker build opdracht een fout retourneert, controleert u of de docker-deamon wordt uitgevoerd. Zorg ervoor dat Docker Desktop wordt uitgevoerd in Windows.

Voer de installatiekopie lokaal uit in een Docker-container.

docker run --detach --publish 5000:50505 flask-demo

Open de http://localhost:5000 URL in uw browser om de web-app lokaal uit te voeren.

Met --detach de optie wordt de container op de achtergrond uitgevoerd. De --publish optie wijst de containerpoort toe aan een poort op de host. De hostpoort (extern) bevindt zich eerst in het paar en de containerpoort (intern) is tweede. Zie Naslaginformatie over Docker-uitvoering voor meer informatie.

Een resourcegroep en Azure Container Registry maken

  1. Voer de opdracht az login uit om u aan te melden bij Azure.

    az login
    
  2. Voer de opdracht az upgrade uit om te controleren of uw versie van de Azure CLI actueel is.

    az upgrade
    
  3. Maak een groep met de opdracht az group create .

    az group create --name web-app-simple-rg --location eastus
    

    Een Azure-resourcegroep is een logische container waarin Azure-resources worden geïmplementeerd en beheerd. Bij het maken van een resourcegroep geeft u een locatie op, zoals eastus.

  4. Maak een Azure Container Registry met de opdracht az acr create .

    az acr create --resource-group web-app-simple-rg \
    --name webappacr123 --sku Basic
    

    Notitie

    De registernaam moet uniek zijn in Azure. Als er een fout optreedt, probeert u een andere naam. Registernamen kunnen bestaan uit 5-50 alfanumerieke tekens. Afbreekstreepjes en onderstrepingstekens zijn niet toegestaan. Zie Azure Container Registry-naamregels voor meer informatie. Als u een andere naam gebruikt, moet u ervoor zorgen dat u uw naam gebruikt in plaats webappacr123 van in de opdrachten die verwijzen naar het register- en registerartefacten in de volgende secties.

    Een Azure Container Registry is een persoonlijk Docker-register waarin installatiekopieën worden opgeslagen voor gebruik in Azure Container Instances, Azure-app Service, Azure Kubernetes Service en andere services. Bij het maken van een register geeft u een naam, SKU en resourcegroep op.

De installatiekopieën bouwen in Azure Container Registry

Bouw de Docker-installatiekopieën in Azure met de opdracht az acr build . De opdracht maakt gebruik van het Dockerfile in de huidige map en pusht de installatiekopieën naar het register.

az acr build \
  --resource-group web-app-simple-rg \
  --registry webappacr123 \
  --image webappsimple:latest .

De --registry optie geeft de registernaam op en de --image optie geeft de naam van de installatiekopieën op. De naam van de afbeelding heeft de indeling registry.azurecr.io/repository:tag.

Web-app implementeren in Azure

  1. Maak een App Service-plan met de opdracht az appservice plan .

    az appservice plan create \
    --name webplan \
    --resource-group web-app-simple-rg \
    --sku B1 \
    --is-linux
    
  2. Stel een omgevingsvariabele in op uw abonnements-id. Deze wordt gebruikt in de --scope parameter in de volgende opdracht.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    

    De opdracht voor het maken van de omgevingsvariabele wordt weergegeven voor de Bash-shell. Wijzig de syntaxis zo nodig voor andere omgevingen.

  3. Maak de web-app met de opdracht az webapp create .

    az webapp create \
    --resource-group web-app-simple-rg \
    --plan webplan --name webappsimple123 \
    --assign-identity [system] \
    --role AcrPull \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/web-app-simple-rg \
    --acr-use-identity --acr-identity [system] \
    --container-image-name webappacr123.azurecr.io/webappsimple:latest 
    

    Opmerkingen:

    • De naam van de web-app moet uniek zijn in Azure. Als er een fout optreedt, probeert u een andere naam. De naam kan bestaan uit alfanumerieke tekens en afbreekstreepjes, maar kan niet beginnen of eindigen met een afbreekstreepje. Zie Microsoft.Web-naamregels voor meer informatie.

    • Als u een andere naam gebruikt dan webappacr123 voor uw Azure Container Registry, moet u ervoor zorgen dat u de parameter op de --container-image-name juiste manier bijwerkt.

    • Met --assign-identityde parameters wordt --scope de door het systeem toegewezen beheerde identiteit in de web-app ingeschakeld en toegewezen aan de AcrPull rol in de resourcegroep--role. Dit geeft de beheerde identiteit toestemming om installatiekopieën op te halen uit azure Container Registry in de resourcegroep.

    • De --acr-use-identity en --acr-identity parameters configureren de web-app om de door het systeem toegewezen beheerde identiteit te gebruiken om installatiekopieën op te halen uit Azure Container Registry.

    • Het kan enkele minuten duren voordat de web-app is gemaakt. U kunt de implementatielogboeken controleren met de opdracht az webapp log tail . Bijvoorbeeld: az webapp log tail --resource-group web-app-simple-rg --name webappsimple123. Als u vermeldingen ziet met 'opwarmen', wordt de container geïmplementeerd.

    • De URL van de web-app is <web-app-name>.azurewebsites.netbijvoorbeeld https://webappsimple123.azurewebsites.net.

Updates maken en opnieuw implementeren

Nadat u codewijzigingen hebt aangebracht, kunt u de app opnieuw implementeren met de opdrachten az acr build en az webapp update .

Opschonen

Alle Azure-resources die in deze zelfstudie zijn gemaakt, bevinden zich in dezelfde resourcegroep. Als u de resourcegroep verwijdert, worden alle resources in de resourcegroep verwijderd. Dit is de snelste manier om alle Azure-resources te verwijderen die voor uw app worden gebruikt.

Als u resources wilt verwijderen, gebruikt u de opdracht az group delete .

az group delete --name web-app-simple-rg

U kunt de groep ook verwijderen in Azure Portal of in Visual Studio Code en de Azure Tools-extensie.

Volgende stappen

Voor meer informatie raadpleegt u de volgende bronnen: