Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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. Deze aanpak biedt een gestroomlijnd pad voor ontwikkelaars die de voordelen van een volledig beheerd platform willen tijdens het implementeren van hun app als één containerartefact met alle afhankelijkheden. 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 een Docker-image lokaal optioneel te bouwen en te testen. Vervolgens gebruikt u de Azure CLI om de Docker-installatiekopieën naar Azure Container Registry (ACR) te pushen en te implementeren in Azure App Service. De webapp is geconfigureerd met de door het systeem toegewezen beheerde identiteit voor veilige, wachtwoordloze toegang om de image uit ACR op te halen met behulp van Azure op rollen gebaseerd toegangsbeheer (RBAC). U kunt ook implementeren met Visual Studio Code , waarbij de Azure Tools-extensie is geïnstalleerd.
Zie Een Flask- of FastAPI-web-app implementeren in Azure Container Apps voor een voorbeeld van het bouwen en maken van een Docker-image om uit te voeren in Azure Container Apps.
Notitie
In deze handleiding laten we zien hoe u een Docker-image maakt dat gedeployed kan worden naar Azure App Service. Het gebruik van een Docker-image is echter niet noodzakelijk om uit te rollen naar App Service. U kunt uw toepassingscode ook rechtstreeks vanuit uw lokale werkruimte uitrollen naar App Service zonder een Docker-image 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-image te maken en in App Service te implementeren. 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 instrueren hoe de afbeelding te bouwen. 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==3.1.0
gunicorn
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 werkers 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 image lokaal bouwen en uitvoeren
Bouw het image 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 image 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 Docker run referentie voor meer informatie.
Een resourcegroep en Azure Container Registry maken
Voer de opdracht az login uit om u aan te melden bij Azure.
az loginVoer de opdracht az upgrade uit om te controleren of uw versie van de Azure CLI actueel is.
az upgradeMaak een groep met de opdracht az group create .
RESOURCE_GROUP_NAME=<resource-group-name> LOCATION=<location> az group create --name $RESOURCE_GROUP_NAME --location $LOCATIONEen 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. Vervang door
<location>de locatie die u kiest. Bepaalde SKU's zijn niet beschikbaar op bepaalde locaties, dus u krijgt mogelijk een foutmelding die dit aangeeft. Gebruik een andere locatie en probeer het opnieuw.Maak een Azure Container Registry met de opdracht az acr create . Vervang
<container-registry-name>door een unieke naam voor uw instantie.CONTAINER_REGISTRY_NAME=<container-registry-name> az acr create --resource-group $RESOURCE_GROOUP_NAME \ --name $CONTAINER_REGISTRY_NAME --sku BasicNotitie
De registernaam moet uniek zijn in Azure. Krijgt u een foutmelding, probeer dan 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 van
webappacr123in de opdrachten die verwijzen naar de register- en registerartefacten in de volgende secties.Een Azure Container Registry is een privé 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 image bouwen in Azure Container Registry
Bouw de Docker-image in Azure met de az acr build-opdracht. De opdracht maakt gebruik van de Dockerfile in de huidige map en uploadt de afbeeldingen naar het depôt.
az acr build \
--resource-group $RESOURCE_GROUP_NAME \
--registry $CONTAINER_REGISTRY_NAME \
--image webappsimple:latest .
De --registry optie specificeert de registernaam en de --image optie specificeert de afbeeldingsnaam. 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 $RESOURCE_GROUP_NAME \ --sku B1 \ --is-linuxStel een omgevingsvariabele in op uw abonnements-id. Deze wordt gebruikt in de
--scopeparameter 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 .
export MSYS_NO_PATHCONV=1 # This line is for Windows users to prevent path conversion issues in Git Bash. az webapp create \ --resource-group $RESOURCE_GROUP_NAME \ --plan webplan --name <container-registry-name> \ --assign-identity [system] \ --role AcrPull \ --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME \ --acr-use-identity --acr-identity [system] \ --container-image-name $CONTAINER_REGISTRY_NAME.azurecr.io/webappsimple:latestOpmerkingen:
De naam van de web-app moet uniek zijn in Azure. Krijgt u een foutmelding, probeer dan 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
webappacr123voor uw Azure Container Registry, moet u ervoor zorgen dat u de parameter op de--container-image-namejuiste manier bijwerkt.Met de parameters
--assign-identity,--role, en--scopewordt de systeemtoegewezen beheerde identiteit ingeschakeld in de webapp en deAcrPull-rol toegekend aan de resourcegroep. Dit geeft de beheerde identiteit toestemming om afbeeldingen uit een Azure Container Registry in de resourcegroep te halen.De parameters
--acr-use-identityen--acr-identityconfigureren de web-app om de systeemtoegewezen beheerde identiteit te gebruiken voor het ophalen van afbeeldingen uit de 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 'warmup' erin, wordt de container uitgerold.De URL van de web-app is
<web-app-name>.azurewebsites.netbijvoorbeeldhttps://webappsimple123.azurewebsites.net.
Updates maken en opnieuw implementeren
Nadat u codewijzigingen hebt aangebracht, kunt u opnieuw implementeren naar App Service 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 $RESOURCE_GROUP_NAME --yes --no-wait
U kunt de groep ook verwijderen in de Azure portal of in Visual Studio Code en de Azure Tools-extensie.
Volgende stappen
Voor meer informatie raadpleegt u de volgende bronnen: