Distribuera en containerbaserad Flask- eller FastAPI-webbapp i Azure App Service
Den här självstudien visar hur du distribuerar en Python Flask- eller FastAPI-webbapp till Azure App Service med hjälp av funktionen Web App for Containers. Web App for Containers ger en enkel startramp för utvecklare att dra nytta av den fullständigt hanterade Azure App Service-plattformen, men som också vill ha en enda distribuerbar artefakt som innehåller en app och alla dess beroenden. Mer information om hur du använder containrar i Azure finns i Jämföra Azure-containeralternativ.
I den här självstudien använder du Docker CLI och Docker för att skapa en Docker-avbildning och testa den lokalt. Du använder Azure CLI för att skapa en Docker-avbildning i ett Azure Container Registry och distribuera den till Azure App Service. Webbappen konfigureras med sin systemtilldelade hanterade identitet (lösenordslösa anslutningar) och rollbaserad Azure-åtkomst för att hämta Docker-avbildningen från Azure Container Registry under distributionen. Du kan också distribuera med Visual Studio Code med Azure Tools-tillägget installerat.
Ett exempel på hur du skapar och skapar en Docker-avbildning som ska köras i Azure Container Apps finns i Distribuera en Flask- eller FastPI-webbapp i Azure Container Apps.
Kommentar
Den här självstudien visar hur du skapar en Docker-avbildning som sedan kan köras i App Service. Detta krävs inte för att använda App Service. Du kan distribuera kod direkt från en lokal arbetsyta till App Service utan att skapa en Docker-avbildning. Ett exempel finns i Snabbstart: Distribuera en Python-webbapp (Django eller Flask) till Azure App Service.
Förutsättningar
För att slutföra självstudierna behöver du:
Ett Azure-konto där du kan distribuera en webbapp till Azure App Service och Azure Container Registry. Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Azure CLI för att skapa en Docker-avbildning och distribuera den till App Service. Du kan också använda Dockeroch Docker CLI för att skapa en Docker och testa den i din lokala miljö.
Hämta exempelkoden
Hämta koden i din lokala miljö.
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git
cd msdocs-python-flask-webapp-quickstart
Lägg till Dockerfile- och .dockerignore-filer
Lägg till en Dockerfile för att instruera Docker hur avbildningen ska skapas. Dockerfile anger användningen av Gunicorn, en webbserver på produktionsnivå som vidarebefordrar webbbegäranden till Flask- och FastAPI-ramverken. KOMMANDONa ENTRYPOINT och CMD instruerar Gunicorn att hantera begäranden för appobjektet.
# 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
används för containerporten (intern) i det här exemplet, men du kan använda valfri kostnadsfri port.
Kontrollera requirements.txt filen för att se till att den innehåller gunicorn
.
Flask==2.2.2
gunicorn
Werkzeug==2.2.2
Lägg till en .dockerignore-fil för att undanta onödiga filer från avbildningen.
.git*
**/*.pyc
.venv/
Konfigurera gunicorn
Gunicorn kan konfigureras med en gunicorn.conf.py fil. När den gunicorn.conf.py filen finns i samma katalog där gunicorn körs behöver du inte ange dess plats i Dockerfile. Mer information om hur du anger konfigurationsfilen finns i Gunicorn-inställningar.
I den här självstudien konfigurerar den föreslagna konfigurationsfilen gunicorn för att öka antalet arbetare baserat på antalet tillgängliga CPU-kärnor. Mer information om gunicorn.conf.py filinställningar finns i Gunicorn-konfiguration.
# 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
Skapa och köra avbildningen lokalt
Skapa avbildningen lokalt.
Kommentar
docker build
Om kommandot returnerar ett fel kontrollerar du att docker-deamonen körs. Kontrollera att Docker Desktop körs i Windows.
Kör avbildningen lokalt i en Docker-container.
docker run --detach --publish 5000:50505 flask-demo
http://localhost:5000
Öppna URL:en i webbläsaren för att se webbappen som körs lokalt.
Alternativet --detach
kör containern i bakgrunden. Alternativet --publish
mappar containerporten till en port på värden. Värdporten (extern) är först i paret och containerporten (intern) är den andra. Mer information finns i Docker-körningsreferens.
Skapa en resursgrupp och Azure Container Registry
Kör kommandot az login för att logga in på Azure.
az login
Kör kommandot az upgrade för att kontrollera att din version av Azure CLI är aktuell.
az upgrade
Skapa en grupp med kommandot az group create .
az group create --name web-app-simple-rg --location eastus
En Azure-resursgrupp är en logisk container där Azure-resurser distribueras och hanteras. När du skapar en resursgrupp anger du en plats, till exempel eastus.
Skapa ett Azure Container Registry med kommandot az acr create .
az acr create --resource-group web-app-simple-rg \ --name webappacr123 --sku Basic
Kommentar
Registernamnet måste vara unikt i Azure. Om du får ett fel kan du prova ett annat namn. Registernamn kan bestå av 5–50 alfanumeriska tecken. Bindestreck och understreck tillåts inte. Mer information finns i Namnregler för Azure Container Registry. Om du använder ett annat namn kontrollerar du att du använder ditt namn i stället
webappacr123
för i kommandona som refererar till registret och registerartefakterna i följande avsnitt.Ett Azure Container Registry är ett privat Docker-register som lagrar avbildningar för användning i Azure Container Instances, Azure App Service, Azure Kubernetes Service och andra tjänster. När du skapar ett register anger du ett namn, en SKU och en resursgrupp.
Skapa avbildningen i Azure Container Registry
Skapa Docker-avbildningen i Azure med kommandot az acr build . Kommandot använder Dockerfile i den aktuella katalogen och skickar avbildningen till registret.
az acr build \
--resource-group web-app-simple-rg \
--registry webappacr123 \
--image webappsimple:latest .
Alternativet --registry
anger registernamnet och alternativet --image
anger avbildningsnamnet. Avbildningsnamnet är i formatet registry.azurecr.io/repository:tag
.
Distribuera webbapp till Azure
Skapa en App Service-plan med kommandot az appservice plan .
az appservice plan create \ --name webplan \ --resource-group web-app-simple-rg \ --sku B1 \ --is-linux
Ange en miljövariabel till ditt prenumerations-ID. Den används i parametern
--scope
i nästa kommando.SUBSCRIPTION_ID=$(az account show --query id --output tsv)
Kommandot för att skapa miljövariabeln visas för Bash-gränssnittet. Ändra syntaxen efter behov för andra miljöer.
Skapa webbappen med kommandot 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
Anteckningar:
Webbappens namn måste vara unikt i Azure. Om du får ett fel kan du prova ett annat namn. Namnet kan bestå av alfanumeriska tecken och bindestreck, men kan inte börja eller sluta med bindestreck. Mer information finns i Microsoft.Web name rules (Namnregler för Microsoft.Web).
Om du använder ett annat namn än
webappacr123
för Azure Container Registry kontrollerar du att du uppdaterar parametern--container-image-name
på rätt sätt.Parametrarna
--assign-identity
,--role
och--scope
aktiverar den systemtilldelade hanterade identiteten i webbappen och tilldelar denAcrPull
rollen i resursgruppen. Detta ger den hanterade identiteten behörighet att hämta avbildningar från alla Azure Container Registry i resursgruppen.Parametrarna
--acr-use-identity
och--acr-identity
konfigurerar webbappen så att den använder sin systemtilldelade hanterade identitet för att hämta avbildningar från Azure Container Registry.Det kan ta några minuter innan webbappen skapas. Du kan kontrollera distributionsloggarna med kommandot az webapp log tail . Exempel:
az webapp log tail --resource-group web-app-simple-rg --name webappsimple123
Om du ser poster med "uppvärmning" i dem distribueras containern.Url:en för webbappen är
<web-app-name>.azurewebsites.net
, till exempelhttps://webappsimple123.azurewebsites.net
.
Göra uppdateringar och distribuera om
När du har ändrat koden kan du distribuera om till App Service med kommandona az acr build och az webapp update .
Rensa
Alla Azure-resurser som skapas i den här självstudien finns i samma resursgrupp. Om du tar bort resursgruppen tas alla resurser i resursgruppen bort och det snabbaste sättet att ta bort alla Azure-resurser som används för din app.
Om du vill ta bort resurser använder du kommandot az group delete .
az group delete --name web-app-simple-rg
Du kan också ta bort gruppen i Azure Portal eller i Visual Studio Code och Azure Tools-tillägget.
Nästa steg
Mer information finns i följande resurser: