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:
Konto platformy Azure, na którym można wdrożyć aplikację internetową w usłudze aplikacja systemu Azure i usłudze Azure Container Registry. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Interfejs wiersza polecenia platformy Azure umożliwiający utworzenie obrazu platformy Docker i wdrożenie go w usłudze App Service. Opcjonalnie platforma Docker i interfejs wiersza polecenia platformy Dockerumożliwiają utworzenie platformy Docker i przetestowanie jej w środowisku lokalnym.
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 gunicorn
plik .
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.
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
Uruchom polecenie az login, aby zalogować się na platformie Azure.
az login
Uruchom polecenie az upgrade, aby upewnić się, że wersja interfejsu wiersza polecenia platformy Azure jest aktualna.
az upgrade
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.
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
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
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.
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
,--role
i--scope
umożliwiają przypisaną przez system tożsamość zarządzaną w aplikacji internetowej i przypisz jejAcrPull
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ładhttps://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: