Udostępnij za pośrednictwem


Wdrożenie aplikacji webowych opartych na Flask lub FastAPI w Azure Container Apps

W tym samouczku pokazano, jak konteneryzować aplikację webową w Pythonie wykorzystując Flask lub FastAPI i wdrożyć ją w Azure Container Apps. Azure Container Apps używa technologii kontenera Docker do hostowania zarówno wbudowanych obrazów, jak i obrazów niestandardowych. Aby uzyskać więcej informacji na temat używania kontenerów w Azure, zobacz Porównanie opcji kontenerów w Azure.

W tym samouczku użyjesz Docker CLI oraz Azure CLI, aby utworzyć obraz Docker i wdrożyć go w Azure Container Apps. Można również wdrożyć przy użyciu Visual Studio Code oraz rozszerzenia narzędzi Azure.

Wymagania wstępne

Do ukończenia tego samouczka potrzebne 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 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", "--config", "gunicorn.conf.py", "app:app"]

W tym przykładzie użyto 50505 portu kontenera (wewnętrznego), ale można użyć dowolnego bezpłatnego portu.

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

Flask==3.1.0
gunicorn

Konfigurowanie Gunicorn

Narzędzie Gunicorn można skonfigurować przy użyciu pliku gunicorn.conf.py . Gdy plik gunicorn.conf.py znajduje się w tym samym katalogu, w którym jest uruchamiany gunicornprogram , nie musisz określać jego lokalizacji w ENTRYPOINT instrukcji lub CMD pliku Dockerfile. Aby uzyskać więcej informacji na temat określania pliku konfiguracji, zobacz Ustawienia Gunicorn.

W tym samouczku sugerowany plik konfiguracji konfiguruje narzędzie Gunicorn, aby zwiększyć liczbę 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

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

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

Kompilowanie i uruchamianie obrazu lokalnie

Skompiluj obraz lokalnie.

docker build --tag flask-demo .

Uruchom obraz lokalnie w kontenerze platformy Docker.

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

Otwórz http://localhost:5000 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.

Wdrażanie aplikacji internetowej w Azure

Aby wdrożyć obraz platformy Docker w Azure Container Apps, użyj polecenia az containerapp up. (Następujące polecenia są wyświetlane dla powłoki Bash. Zmień znak kontynuacji (\) odpowiednio dla innych powłok.

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

Po zakończeniu wdrażania masz grupę zasobów z następującymi zasobami w niej:

  • Rejestr kontenerów Azure
  • Środowisko aplikacji kontenerowych
  • Aplikacja kontenerowa uruchamiająca obraz aplikacji webowej
  • Obszar roboczy Log Analytics

Dane wyjściowe az containerapp up polecenia zawierają adres URL wdrożonej aplikacji. Otwórz adres URL w przeglądarce, aby wyświetlić aplikację internetową działającą w Azure. Adres URL wygląda następująco https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io, gdzie element <generated-text> i <location-info> jest unikatowy dla danego wdrożenia.

Wprowadzanie aktualizacji i ponowne wdrażanie

Po wprowadzeniu aktualizacji kodu ponownie uruchom poprzednie az containerapp up polecenie. Polecenie przebudowuje obraz i wdraża go ponownie do Azure Container Apps. Po ponownym uruchomieniu polecenia program wykryje, że grupa zasobów i aplikacja już istnieją, a następnie aktualizuje tylko aplikację kontenera.

W bardziej złożonych scenariuszach aktualizacji można skorzystać z poleceń az acr build i az containerapp update, aby zaktualizować aplikację kontenerową.

Czyszczenie

Wszystkie zasoby 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. Jest to najszybszy sposób usuwania wszystkich Azure zasobów używanych dla aplikacji.

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

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

Możesz również usunąć grupę w portalu Azure lub w Visual Studio Code przy użyciu rozszerzenia narzędzi Azure.

Dalsze kroki

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