Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym samouczku pokazano, jak wdrożyć aplikację internetową Python Flask lub FastAPI w usłudze Azure App Service przy użyciu funkcji Web App for Containers. Takie podejście zapewnia usprawnioną ścieżkę dla deweloperów, którzy chcą korzystać z w pełni zarządzanej platformy podczas wdrażania aplikacji jako pojedynczego konteneryzowanego artefaktu ze wszystkimi uwzględnionymi zależnościami. 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 Docker CLI i Docker, aby opcjonalnie utworzyć i przetestować lokalnie obraz Dockera. Następnie użyjesz interfejsu wiersza polecenia platformy Azure do przesłania obrazu Docker do Azure Container Registry (ACR) i wdrożenia w Azure App Service. Aplikacja internetowa jest skonfigurowana przy użyciu przypisanej przez system tożsamości zarządzanej na potrzeby bezpiecznego, bez hasła dostępu w celu ściągnięcia obrazu z usługi ACR przy użyciu kontroli dostępu opartej na rolach (RBAC) platformy Azure. 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 obrazu 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 Flask lub FastPI w usłudze Azure Container Apps).
Uwaga
W tym samouczku pokazano, jak utworzyć obraz Docker, który można wdrożyć na Azure App Service. Jednak użycie obrazu Docker nie jest wymagane do wdrożenia na usłudze App Service. Możesz również wdrożyć kod aplikacji 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 Python (Django lub Flask) do usługi Azure App 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 Dockerfile, aby poinstruować Docker, jak zbudować 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
.
Flask==3.1.0
gunicorn
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 konfiguracyjny konfiguruje gunicorn w celu zwiększenia liczby pracowników na podstawie liczby dostępnych rdzeni 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
Jeśli polecenie docker build
zwróci błąd, upewnij się, że daemon Dockera 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.
Utwórz grupę zasobów i 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ę przy użyciu polecenia az group create.
RESOURCE_GROUP_NAME=<resource-group-name> LOCATION=<location> az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
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. Zastąp
<location>
dowolną lokalizacją. Niektóre jednostki SKU są niedostępne w niektórych lokalizacjach, więc może wystąpić błąd wskazujący na to. Użyj innej lokalizacji i spróbuj ponownie.Utwórz usługę Azure Container Registry za pomocą polecenia az acr create . Zamień
<container-registry-name>
na unikatową nazwę dla swojego wystąpienia.CONTAINER_REGISTRY_NAME=<container-registry-name> az acr create --resource-group $RESOURCE_GROOUP_NAME \ --name $CONTAINER_REGISTRY_NAME --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 Azure Container Instances, Azure App 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 przesyła obraz do rejestru.
az acr build \
--resource-group $RESOURCE_GROUP_NAME \
--registry $CONTAINER_REGISTRY_NAME \
--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 przy użyciu polecenia az appservice plan.
az appservice plan create \ --name webplan \ --resource-group $RESOURCE_GROUP_NAME \ --sku B1 \ --is-linux
Ustaw zmienną środowiskową do identyfikatora 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 zostało podane dla powłoki Bash. Zmień składnię odpowiednio dla innych środowisk.
Utwórz aplikację internetową używając polecenia az webapp create.
export MSYS_NO_PATHCONV=1 # This line is for Windows users to prevent path conversion issues in Git Bash. az webapp create \ --resource-group $RESOURCE_GROUP_NAME \ --plan webplan --name <container-registry-name> \ --assign-identity [system] \ --role AcrPull \ --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME \ --acr-use-identity --acr-identity [system] \ --container-image-name $CONTAINER_REGISTRY_NAME.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ą systemowo przypisaną tożsamość zarządzaną w aplikacji internetowej i przypisują jej rolęAcrPull
w grupie zasobów. Daje to tożsamości zarządzanej uprawnienie do pobierania obrazów z dowolnego 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. Można sprawdzić dzienniki wdrażania za pomocą polecenia az webapp log tail. Na przykład
az webapp log tail --resource-group web-app-simple-rg --name webappsimple123
. Jeśli zobaczysz wpisy z "rozgrzewanie" w nich, oznacza to, że 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 az group delete polecenia.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
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: