Nasazení webové aplikace Flask nebo FastAPI na Azure Container Apps

V tomto kurzu se dozvíte, jak kontejnerizovat webovou aplikaci Python Flask nebo FastAPI a nasadit ji do Azure Container Apps. Azure Container Apps používá technologii kontejneru Docker k hostování integrovaných imagí i vlastních imagí. Další informace o používání kontejnerů v Azure najdete v tématu Porovnání možností kontejnerů v Azure.

V tomto kurzu pomocí Docker CLI a Azure CLI vytvoříte image Dockeru a nasadíte ji do Azure Container Apps. Nasazení můžete provést také pomocí rozšíření Visual Studio Code a rozšíření Azure Tools.

Požadavky

K dokončení 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ává 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", "--config", "gunicorn.conf.py", "app:app"]

Tento příklad se používá 50505 pro port kontejneru (interní), ale můžete použít libovolný bezplatný port.

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

Flask==3.1.0
gunicorn

Konfigurace gunicornu

Gunicorn můžete nakonfigurovat pomocí souboru gunicorn.conf.py . Pokud je soubor gunicorn.conf.py ve stejném adresáři, ve kterém spouštíte gunicorn, nemusíte zadávat jeho umístění v souboru ENTRYPOINT ani v instrukci CMD. 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

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

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

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

Sestavte obraz lokálně.

docker build --tag flask-demo .

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

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

Otevřete http://localhost:5000 v prohlížeči a podívejte se na 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 naleznete v referenci ke spuštění Dockeru.

Nasazení webové aplikace do Azure

K nasazení image Dockeru do Azure Container Apps použijte příkaz az containerapp up. (Pro prostředí Bash se zobrazí následující příkazy. Změňte znak pokračování (\) podle potřeby pro ostatní příkazové prostředí.

az containerapp up \
  --resource-group web-flask-aca-rg --name web-aca-app \
  --ingress external --target-port 50505 --source .

Po dokončení nasazení máte ve skupině prostředků následující prostředky:

  • Azure Container Registry
  • Prostředí pro Container Apps
  • Kontejnerová aplikace se spuštěnou imagí webové aplikace
  • Pracovní prostor Log Analytics

Výstup az containerapp up příkazu zahrnuje adresu URL nasazené aplikace. Otevřete adresu URL v prohlížeči a zobrazte webovou aplikaci spuštěnou v Azure. Adresa URL vypadá jako následující https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io, kde <generated-text> a <location-info> jsou jedinečné pro vaše nasazení.

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

Po aktualizaci kódu spusťte předchozí az containerapp up příkaz znovu. Příkaz znovu sestaví image a znovu ji nasadí do Azure Container Apps. Když příkaz spustíte znovu, zjistí, že skupina prostředků a aplikace už existují, a aktualizuje jenom aplikaci typu kontejner.

Ve složitějších scénářích aktualizací můžete znovu nasadit příkazy az acr build a az containerapp update společně k aktualizaci aplikace kontejneru.

Vyčištění

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

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

az group delete --name web-flask-aca-rg

Skupinu můžete odebrat také na portálu Azure nebo v Visual Studio Code pomocí rozšíření Azure Tools.

Další kroky

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