Share via


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. Och du använder Azure CLI för att skapa en Docker-avbildning i Azure och distribuera den till Azure App Service. 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:

Hämta exempelkoden

Hämta koden i din lokala miljö.

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

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.

docker build --tag flask-demo .

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

  1. 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.

  2. Skapa ett Azure Container Registry med kommandot az acr create .

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

    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. Det andra kommandot sparar lösenordet till en variabel med kommandot az credential show . Lösenordet används för att autentisera till registret i ett senare steg.

  3. Ange en miljövariabel till värdet för lösenordet för registret.

    ACR_PASSWORD=$(az acr credential show \
    --resource-group web-app-simple-rg \
    --name webappacr123 \
    --query "passwords[?name == 'password'].value" \
    --output tsv)
    

    Kommandot för att skapa miljövariabeln visas för Bash-gränssnittet. Ändra syntaxen och fortsättningstecknet (\) efter behov för andra gränssnitt.

    Du kan också hämta lösenordet (ACR_PASSWORD) från Azure-portalen genom att gå till registret, välja Åtkomstnycklar och kopiera lösenordet.

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

  1. 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
    
  2. Skapa webbappen med kommandot az webapp create .

    az webapp create \
    --resource-group web-app-simple-rg \
    --plan webplan --name webappsimple123 \
    --docker-registry-server-password $ACR_PASSWORD \
    --docker-registry-server-user webappacr123 \
    --role acrpull \
    --deployment-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 parametrarna --docker-registry-server-user och --deployment-container-image-name på rätt sätt.

    • 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 exempel https://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-portalen eller i Visual Studio Code och Azure Tools-tillägget.

Nästa steg

Mer information finns i följande resurser: