Nasazení kontejnerizované webové aplikace Flask nebo FastAPI ve službě Aplikace Azure Service

V tomto kurzu se dozvíte, jak nasadit webovou aplikaci Python Flask nebo FastAPI do služby Aplikace Azure Pomocífunkce Web App for Containers. Služba Web App for Containers poskytuje vývojářům snadný postup, jak využít plně spravovanou platformu služby Aplikace Azure Service, ale kteří také chtějí jeden nasaditelný artefakt obsahující aplikaci a všechny její závislosti. Další informace o používání kontejnerů v Azure najdete v tématu Porovnání možností kontejneru Azure.

V tomto kurzu pomocí rozhraní příkazového řádku Dockeru a Dockeru volitelně vytvoříte image Dockeru a otestujete ji místně. A pomocí Azure CLI vytvoříte image Dockeru v Azure a nasadíte ji do služby Aplikace Azure Service. Můžete také nasadit pomocí editoru Visual Studio Code s nainstalovaným rozšířením Azure Tools. Příklad vytvoření a vytvoření image Dockeru pro spuštění v Azure Container Apps najdete v tématu Nasazení webové aplikace Flask nebo FastPI ve službě Azure Container Apps.

Poznámka:

V tomto kurzu se dozvíte, jak vytvořit image Dockeru, která se pak dá spustit ve službě App Service. K používání služby App Service to není nutné. Kód můžete nasadit přímo z místního pracovního prostoru do služby App Service bez vytvoření image Dockeru. Příklad najdete v tématu Rychlý start: Nasazení webové aplikace Python (Django nebo Flask) do služby Aplikace Azure Service.

Požadavky

Pro absolvování tohoto kurzu potřebujete:

Získání ukázkového kódu

V místním prostředí získejte kód.

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

Přidání souborů Dockerfile a souborů .dockerignore

Přidejte soubor Dockerfile , který dá Dockeru pokyn, jak sestavit image. Soubor Dockerfile určuje použití Gunicornu, webového serveru na úrovni produkce, který předává webové požadavky na architektury Flask a FastAPI. Příkazy ENTRYPOINT a CMD dávají Gunicorn pokyn, aby zpracovával požadavky na objekt aplikace.

# 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 se používá pro port kontejneru (interní) v tomto příkladu, ale můžete použít libovolný bezplatný port.

Zkontrolujte soubor requirements.txt a ujistěte se, že obsahuje gunicorn.

Flask==2.2.2
gunicorn
Werkzeug==2.2.2

Přidejte soubor .dockerignore pro vyloučení nepotřebných souborů z image.

.git*
**/*.pyc
.venv/

Konfigurace gunicornu

Gunicorn lze nakonfigurovat s gunicorn.conf.py souborem. Když se soubor gunicorn.conf.py nachází ve stejném adresáři, ve kterém je spuštěn gunicorn, nemusíte v souboru Dockerfile zadávat jeho umístění. Další informace o zadání konfiguračního souboru naleznete v tématu Nastavení Gunicorn.

V tomto kurzu navrhovaný konfigurační soubor nakonfiguruje gunicorn, aby zvýšil počet pracovních procesů na základě počtu dostupných jader procesoru. Další informace o nastavení souboru gunicorn.conf.py naleznete v tématu Konfigurace Gunicorn.

# 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

Sestavení a místní spuštění image

Sestavte image místně.

docker build --tag flask-demo .

Poznámka:

docker build Pokud příkaz vrátí chybu, ujistěte se, že je spuštěný deamon Dockeru. Ve Windows se ujistěte, že je spuštěná aplikace Docker Desktop.

Spusťte image místně v kontejneru Dockeru.

docker run --detach --publish 5000:50505 flask-demo

http://localhost:5000 Otevřete adresu URL v prohlížeči a zobrazte webovou aplikaci spuštěnou místně.

Tato --detach možnost spustí kontejner na pozadí. Možnost --publish mapuje port kontejneru na port na hostiteli. Port hostitele (externí) je první ve dvojici a port kontejneru (interní) je druhý. Další informace najdete v referenčních informacích ke spuštění Dockeru.

Vytvoření skupiny prostředků a služby Azure Container Registry

  1. Vytvořte skupinu pomocí příkazu az group create .

    az group create --name web-app-simple-rg --location eastus
    

    Skupina prostředků Azure je logický kontejner, ve kterém se nasazují a spravují prostředky Azure. Při vytváření skupiny prostředků zadáte umístění, například eastus.

  2. Pomocí příkazu az acr create vytvořte službu Azure Container Registry.

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

    Poznámka:

    Název registru musí být v Azure jedinečný. Pokud se zobrazí chyba, zkuste jiný název. Názvy registru můžou obsahovat 5 až 50 alfanumerických znaků. Spojovníky a podtržítka nejsou povoleny. Další informace najdete v pravidlech názvů služby Azure Container Registry. Pokud používáte jiný název, ujistěte se, že používáte své jméno místo webappacr123 příkazů, které odkazují na artefakty registru a registru v následujících částech.

    Azure Container Registry je privátní registr Dockeru, který ukládá image pro použití ve službě Azure Container Instances, Aplikace Azure Service, Azure Kubernetes Service a dalších službách. Při vytváření registru zadáte název, skladovou položku a skupinu prostředků. Druhý příkaz uloží heslo do proměnné pomocí příkazu az credential show . Heslo se použije k ověření v registru v pozdějším kroku.

  3. Nastavte proměnnou prostředí na hodnotu hesla pro registr.

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

    Příkaz pro vytvoření proměnné prostředí se zobrazí pro prostředí Bash. Změňte syntaxi a znak pokračování (\) podle potřeby pro ostatní prostředí.

    Heslo (ACR_PASSWORD) můžete získat také z webu Azure Portal tak, že přejdete do registru, vyberete Přístupové klíče a zkopírujete heslo.

Sestavení image ve službě Azure Container Registry

Sestavte image Dockeru v Azure pomocí příkazu az acr build . Příkaz používá soubor Dockerfile v aktuálním adresáři a nasdílí image do registru.

az acr build \
  --resource-group web-app-simple-rg \
  --registry webappacr123 \
  --image webappsimple:latest .

Možnost --registry určuje název registru a --image možnost určuje název image. Název obrázku je ve formátu registry.azurecr.io/repository:tag.

Nasazení webové aplikace do Azure

  1. Vytvořte plán služby App Service pomocí příkazu az appservice plan .

    az appservice plan create \
    --name webplan \
    --resource-group web-app-simple-rg \
    --sku B1 \
    --is-linux
    
  2. Vytvořte webovou aplikaci pomocí příkazu 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 
    

    Poznámky:

    • Název webové aplikace musí být v Azure jedinečný. Pokud se zobrazí chyba, zkuste jiný název. Název se může skládat z alfanumerických znaků a pomlček, ale nemůže začínat ani končit spojovníkem. Další informace najdete v pravidlech názvů Microsoft.Web.

    • Pokud používáte jiný název než webappacr123 pro azure Container Registry, ujistěte se, že správně aktualizujete --docker-registry-server-user parametry a --deployment-container-image-name parametry.

    • Vytvoření webové aplikace může trvat několik minut. Protokoly nasazení můžete zkontrolovat pomocí příkazu az webapp log tail . Například az webapp log tail --resource-group web-app-simple-rg --name webappsimple123. Pokud se v nich zobrazí položky s textem "warmup", kontejner se nasazuje.

    • Adresa URL webové aplikace je <web-app-name>.azurewebsites.netnapříklad https://webappsimple123.azurewebsites.net.

Provádění aktualizací a opětovného nasazení

Po provedení změn kódu můžete službu App Service znovu nasadit pomocí příkazů az acr build a az webapp update .

Vyčištění

Všechny prostředky Azure vytvořené v tomto kurzu jsou ve stejné skupině prostředků. Odebráním skupiny prostředků odeberete všechny prostředky ve skupině prostředků a nejrychlejším způsobem, jak odebrat všechny prostředky Azure používané pro vaši aplikaci.

K odebrání prostředků použijte příkaz az group delete .

az group delete --name web-app-simple-rg

Skupinu můžete odebrat také na webu Azure Portal nebo v editoru Visual Studio Code a rozšíření Azure Tools.

Další kroky

Další informace naleznete v následujících zdrojích: