Udostępnij za pośrednictwem


Wdrażanie konteneryzowanej aplikacji internetowej platformy Flask lub FastAPI w usłudze aplikacja systemu Azure Service

W tym samouczku pokazano, jak wdrożyć aplikację internetową platformy Python Flask lub FastAPI w usłudze aplikacja systemu Azure Przy użyciu funkcji Web App for Containers. Usługa Web App for Containers umożliwia deweloperom łatwe korzystanie z w pełni zarządzanej platformy usługi aplikacja systemu Azure Service, ale którzy chcą również utworzyć pojedynczy artefakt z możliwością wdrożenia zawierający aplikację i wszystkie jej zależności. Aby uzyskać więcej informacji na temat używania kontenerów na platformie Azure, zobacz Porównanie opcji kontenera platformy Azure.

W tym samouczku użyjesz interfejsu wiersza polecenia platformy Docker i platformy Docker, aby opcjonalnie utworzyć obraz platformy Docker i przetestować go lokalnie. Interfejs wiersza polecenia platformy Azure służy do tworzenia obrazu platformy Docker w usłudze Azure Container Registry i wdrażania go w usłudze aplikacja systemu Azure Service. Aplikacja internetowa jest skonfigurowana przy użyciu przypisanej przez system tożsamości zarządzanej (połączeń bez hasła) i dostępu opartego na rolach platformy Azure w celu ściągnięcia obrazu platformy Docker z usługi Azure Container Registry podczas wdrażania. Można również wdrożyć za pomocą programu Visual Studio Code z zainstalowanym rozszerzeniem narzędzi platformy Azure.

Aby zapoznać się z przykładem tworzenia i tworzenia obrazu platformy Docker do uruchamiania w usłudze Azure Container Apps, zobacz Deploy a Flask or FastPI web app on Azure Container Apps (Wdrażanie aplikacji internetowej platformy Flask lub FastPI w usłudze Azure Container Apps).

Uwaga

W tym samouczku przedstawiono tworzenie obrazu platformy Docker, który można następnie uruchomić w usłudze App Service. Nie jest to wymagane do korzystania z usługi App Service. Kod można wdrożyć bezpośrednio z lokalnego obszaru roboczego w usłudze App Service bez tworzenia obrazu platformy Docker. Aby zapoznać się z przykładem, zobacz Szybki start: wdrażanie aplikacji internetowej w języku Python (Django lub Flask) w celu aplikacja systemu Azure Service.

Wymagania wstępne

Do ukończenia tego samouczka niezbędne są następujące elementy:

Pobieranie przykładowego kodu

W środowisku lokalnym pobierz kod.

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

Dodawanie plików Dockerfile i .dockerignore

Dodaj plik Dockerfile, aby poinstruować platformę Docker, jak skompilować obraz. Plik Dockerfile określa użycie narzędzia Gunicorn, serwera internetowego na poziomie produkcyjnym, który przekazuje żądania internetowe do platform Flask i FastAPI. Polecenia ENTRYPOINT i CMD instruują Gunicorn do obsługi żądań dla obiektu aplikacji.

# 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 jest używany dla portu kontenera (wewnętrznego) w tym przykładzie, ale można użyć dowolnego bezpłatnego portu.

Sprawdź plik requirements.txt, aby upewnić się, że zawiera gunicornplik .

Flask==2.2.2
gunicorn
Werkzeug==2.2.2

Dodaj plik .dockerignore, aby wykluczyć niepotrzebne pliki z obrazu.

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

Konfigurowanie gunicorn

Gunicorn można skonfigurować za pomocą pliku gunicorn.conf.py . Gdy plik gunicorn.conf.py znajduje się w tym samym katalogu, w którym jest uruchamiany gunicorn, nie musisz określać jego lokalizacji w pliku Dockerfile. Aby uzyskać więcej informacji na temat określania pliku konfiguracji, zobacz Ustawienia gunicorn.

W tym samouczku sugerowany plik konfiguracji konfiguruje gunicorn w celu zwiększenia liczby procesów roboczych na podstawie liczby dostępnych rdzeni procesora CPU. Aby uzyskać więcej informacji na temat ustawień gunicorn.conf.py plików, zobacz Konfiguracja serwera 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

Kompilowanie i uruchamianie obrazu lokalnie

Skompiluj obraz lokalnie.

docker build --tag flask-demo .

Uwaga

docker build Jeśli polecenie zwróci błąd, upewnij się, że deamon platformy Docker jest uruchomiony. W systemie Windows upewnij się, że program Docker Desktop jest uruchomiony.

Uruchom obraz lokalnie w kontenerze platformy Docker.

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

http://localhost:5000 Otwórz adres URL w przeglądarce, aby wyświetlić aplikację internetową uruchomioną lokalnie.

Opcja --detach uruchamia kontener w tle. Opcja --publish mapuje port kontenera na port na hoście. Port hosta (zewnętrzny) jest pierwszy w parze, a port kontenera (wewnętrzny) jest drugi. Aby uzyskać więcej informacji, zobacz Dokumentacja uruchamiania platformy Docker.

Tworzenie grupy zasobów i usługi Azure Container Registry

  1. Uruchom polecenie az login, aby zalogować się na platformie Azure.

    az login
    
  2. Uruchom polecenie az upgrade, aby upewnić się, że wersja interfejsu wiersza polecenia platformy Azure jest aktualna.

    az upgrade
    
  3. Utwórz grupę za pomocą polecenia az group create .

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

    Grupa zasobów platformy Azure to logiczny kontener przeznaczony do wdrażania zasobów platformy Azure i zarządzania nimi. Podczas tworzenia grupy zasobów należy określić lokalizację, taką jak eastus.

  4. Utwórz usługę Azure Container Registry za pomocą polecenia az acr create .

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

    Uwaga

    Nazwa rejestru musi być unikatowa na platformie Azure. Jeśli wystąpi błąd, spróbuj użyć innej nazwy. Nazwy rejestru mogą zawierać od 5 do 50 znaków alfanumerycznych. Łączniki i podkreślenia nie są dozwolone. Aby dowiedzieć się więcej, zobacz Reguły nazw usługi Azure Container Registry. Jeśli używasz innej nazwy, upewnij się, że używasz swojej nazwy, a nie webappacr123 w poleceniach odwołujących się do rejestru i artefaktów rejestru w poniższych sekcjach.

    Usługa Azure Container Registry to prywatny rejestr platformy Docker, który przechowuje obrazy do użycia w usłudze Azure Container Instances, aplikacja systemu Azure Service, Azure Kubernetes Service i innych usługach. Podczas tworzenia rejestru należy określić nazwę, jednostkę SKU i grupę zasobów.

Tworzenie obrazu w usłudze Azure Container Registry

Skompiluj obraz platformy Docker na platformie Azure za pomocą polecenia az acr build . Polecenie używa pliku Dockerfile w bieżącym katalogu i wypycha obraz do rejestru.

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

Opcja --registry określa nazwę rejestru, a --image opcja określa nazwę obrazu. Nazwa obrazu ma format registry.azurecr.io/repository:tag.

Wdrażanie aplikacji internetowej na platformie Azure

  1. Utwórz plan usługi App Service za pomocą polecenia az appservice plan .

    az appservice plan create \
    --name webplan \
    --resource-group web-app-simple-rg \
    --sku B1 \
    --is-linux
    
  2. Ustaw zmienną środowiskową na identyfikator subskrypcji. Jest on używany w parametrze --scope w następnym poleceniu.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    

    Polecenie tworzenia zmiennej środowiskowej jest wyświetlane dla powłoki Bash. Zmień składnię odpowiednio dla innych środowisk.

  3. Utwórz aplikację internetową za pomocą polecenia 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 
    

    Uwagi:

    • Nazwa aplikacji internetowej musi być unikatowa na platformie Azure. Jeśli wystąpi błąd, spróbuj użyć innej nazwy. Nazwa może zawierać znaki alfanumeryczne i łączniki, ale nie może rozpoczynać ani kończyć się łącznikiem. Aby dowiedzieć się więcej, zobacz Microsoft.Web name rules (Reguły nazw Microsoft.Web).

    • Jeśli używasz nazwy innej niż webappacr123 dla usługi Azure Container Registry, upewnij się, że odpowiednio zaktualizuj --container-image-name parametr.

    • Parametry --assign-identity, --rolei --scope umożliwiają przypisaną przez system tożsamość zarządzaną w aplikacji internetowej i przypisz jej AcrPull rolę w grupie zasobów. Daje to tożsamości zarządzanej uprawnienie do ściągania obrazów z dowolnej usługi Azure Container Registry w grupie zasobów.

    • Parametry --acr-use-identity i --acr-identity umożliwiają skonfigurowanie aplikacji internetowej tak, aby korzystała z przypisanej przez system tożsamości zarządzanej do ściągania obrazów z usługi Azure Container Registry.

    • Utworzenie aplikacji internetowej może potrwać kilka minut. Dzienniki wdrażania można sprawdzić za pomocą polecenia az webapp log tail . Na przykład az webapp log tail --resource-group web-app-simple-rg --name webappsimple123. Jeśli w nich zobaczysz wpisy z "rozgrzewkami", kontener jest wdrażany.

    • Adres URL aplikacji internetowej to <web-app-name>.azurewebsites.net, na przykład https://webappsimple123.azurewebsites.net.

Wprowadzanie aktualizacji i ponowne wdrażanie

Po wprowadzeniu zmian w kodzie możesz ponownie wdrożyć usługę App Service za pomocą poleceń az acr build i az webapp update .

Czyszczenie

Wszystkie zasoby platformy Azure utworzone w tym samouczku znajdują się w tej samej grupie zasobów. Usunięcie grupy zasobów spowoduje usunięcie wszystkich zasobów w grupie zasobów i jest najszybszym sposobem usunięcia wszystkich zasobów platformy Azure używanych dla aplikacji.

Aby usunąć zasoby, użyj polecenia az group delete .

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

Możesz również usunąć grupę w witrynie Azure Portal lub w programie Visual Studio Code i rozszerzeniu narzędzi platformy Azure.

Następne kroki

Aby uzyskać więcej informacji, zobacz następujące zasoby: