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:
Een Azure-account waar u een web-app kunt implementeren in Azure-app Service en Azure Container Registry. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Azure CLI om een Docker-installatiekopieën te maken en te implementeren in App Service. En eventueel dockeren de Docker CLI om een Docker te maken en te testen in uw lokale omgeving.
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.
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
Voer de opdracht az login uit om u aan te melden bij Azure.
az login
Voer de opdracht az upgrade uit om te controleren of uw versie van de Azure CLI actueel is.
az upgrade
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.
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
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
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.
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-identity
de parameters wordt--scope
de door het systeem toegewezen beheerde identiteit in de web-app ingeschakeld en toegewezen aan deAcrPull
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.net
bijvoorbeeldhttps://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: