Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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. Den här metoden ger en smidig väg för utvecklare som vill dra nytta av en helt hanterad plattform när de distribuerar sin app som en enskild containeriserad artefakt med alla beroenden inkluderade. Mer information om hur du använder containrar i Azure finns i Jämföra Azure-containeralternativ.
I den här handledningen använder du Docker CLI och Docker för att skapa och testa en Docker-avbild lokalt. Sedan använder du Azure CLI för att skicka Docker-avbildningen till Azure Container Registry (ACR) och distribuera den till Azure App Service. Webbappen är konfigurerad med sin systemtilldelade hanterade identitet för säker åtkomst utan lösenord för att hämta bilden från ACR med hjälp av rollbaserad åtkomstkontroll i Azure (RBAC). 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 guiden visar hur du skapar en Docker-bild som kan distribueras till Azure App Service. Det är däremot inte nödvändigt att använda en Docker-avbildning för att distribuera till App Service. Du kan också distribuera programkoden direkt från din lokala 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==3.1.0
gunicorn
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 loginKör kommandot az upgrade för att kontrollera att din version av Azure CLI är aktuell.
az upgradeSkapa en grupp med kommandot az group create .
RESOURCE_GROUP_NAME=<resource-group-name> LOCATION=<location> az group create --name $RESOURCE_GROUP_NAME --location $LOCATIONEn 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. Ersätt
<location>med den plats du väljer. Vissa SKU:er är inte tillgängliga på vissa platser, så du kan få ett fel som anger detta. Använd en annan plats och försök igen.Skapa ett Azure Container Registry med kommandot az acr create . Ersätt
<container-registry-name>med ett unikt namn för din instans.CONTAINER_REGISTRY_NAME=<container-registry-name> az acr create --resource-group $RESOURCE_GROOUP_NAME \ --name $CONTAINER_REGISTRY_NAME --sku BasicKommentar
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
webappacr123fö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 $RESOURCE_GROUP_NAME \
  --registry $CONTAINER_REGISTRY_NAME \
  --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 $RESOURCE_GROUP_NAME \ --sku B1 \ --is-linuxAnge en miljövariabel till ditt prenumerations-ID. Den används i parametern
--scopei 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 .
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:latestAnteckningar:
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
webappacr123för Azure Container Registry kontrollerar du att du uppdaterar parametern--container-image-namepå rätt sätt.Parametrarna
--assign-identity,--roleoch--scopeaktiverar den systemtilldelade hanterade identiteten i webbappen och tilldelar denAcrPullrollen i resursgruppen. Detta ger den hanterade identiteten behörighet att hämta avbildningar från alla Azure Container Registry i resursgruppen.Parametrarna
--acr-use-identityoch--acr-identitykonfigurerar 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 webappsimple123Om 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 $RESOURCE_GROUP_NAME --yes --no-wait
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: