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. Za pomocą interfejsu wiersza polecenia platformy Azure utworzysz obraz platformy Docker na platformie Azure i wdrożysz go w usłudze aplikacja systemu Azure Service. 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

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

  2. 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 --admin-enabled true
    

    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. Drugie polecenie zapisuje hasło w zmiennej za pomocą polecenia az credential show . Hasło jest używane do uwierzytelniania w rejestrze w późniejszym kroku.

  3. Ustaw zmienną środowiskową na wartość hasła dla rejestru.

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

    Polecenie tworzenia zmiennej środowiskowej jest wyświetlane dla powłoki Bash. Zmień składnię i znak kontynuacji (\) odpowiednio dla innych powłok.

    Możesz również pobrać hasło (ACR_PASSWORD) z witryny Azure Portal , przechodząc do rejestru, wybierając pozycję Klucze dostępu i kopiując hasło.

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

    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 --docker-registry-server-user parametry i --deployment-container-image-name .

    • 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: