Поделиться через


Развертывание веб-приложения Flask или FastAPI на Azure Container Apps

В этом руководстве показано, как контейнеризировать веб-приложение Python Flask или FastAPI и развернуть его в Azure Container Apps. Azure Container Apps использует технологию контейнеров Docker для размещения встроенных образов и пользовательских образов. Дополнительные сведения об использовании контейнеров в Azure см. в разделе Сравнение параметров контейнеров Azure.

В этом руководстве используется интерфейс командной строки Docker CLI и Azure CLI для создания образа Docker и его развертывания в Azure Container Apps. Вы также можете развернуть с помощью расширения Visual Studio Code и расширения Azure Tools.

Предпосылки

Чтобы завершить работу с этим руководством, вам потребуется:

Получите пример кода

В локальной среде получите код.

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

Добавить файлы Dockerfile и .dockerignore

Добавьте Dockerfile, чтобы указать Docker, как создать образ. Dockerfile указывает использование Gunicorn, веб-сервера уровня производства, который пересылает веб-запросы на платформы Flask и FastAPI. Команды ENTRYPOINT и CMD предписывают Gunicorn обрабатывать запросы объекта приложения.

# 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"]

В этом примере используется 50505 порт контейнера (внутренний), но можно использовать любой бесплатный порт.

Проверьте файл requirements.txt, чтобы убедиться, что он содержит gunicorn.

Flask==3.1.0
gunicorn

Настройка Gunicorn

Вы можете настроить Gunicorn с помощью файла gunicorn.conf.py . Если файл gunicorn.conf.py находится в том же каталоге, где выполняется gunicorn, то вам не нужно указывать его местоположение в инструкции ENTRYPOINT или CMD файла Dockerfile. Дополнительные сведения об указании файла конфигурации см. в разделе "Параметры Gunicorn".

В этом руководстве предлагаемый файл конфигурации настраивает Gunicorn для увеличения числа рабочих ролей на основе количества доступных ядер ЦП. Дополнительные сведения о параметрах файла gunicorn.conf.py см. в разделе "Конфигурация 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

Добавьте файл dockerignore, чтобы исключить ненужные файлы из образа.

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

Сборка и запуск образа локально

Создайте образ локально.

docker build --tag flask-demo .

Локально запустите образ в контейнере Docker.

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

Откройте http://localhost:5000 в браузере, чтобы увидеть веб-приложение, работающее локально.

Параметр --detach запускает контейнер в фоновом режиме. Параметр --publish сопоставляет порт контейнера с портом на узле. Порт узла (внешний) первый в паре, и порт контейнера (внутренний) второй. Для получения дополнительной информации см. справочник по команде Docker run.

Развертывание веб-приложения в Azure

Чтобы развернуть образ Docker в Azure Container Apps, используйте команду az containerapp up. (Для оболочки Bash показаны следующие команды. Измените символ продолжения (\) в соответствии с другими оболочками.)

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

Когда развертывание завершится, у вас есть группа ресурсов со следующими ресурсами внутри него:

  • Azure Container Registry
  • Среда для контейнерных приложений
  • Контейнерное приложение, использующее образ веб-приложения
  • Рабочая область Log Analytics

Выходные данные az containerapp up команды включают URL-адрес развернутого приложения. Откройте URL-адрес в браузере, чтобы увидеть веб-приложение, работающее в Azure. URL-адрес выглядит следующим образом https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io, где <generated-text> и <location-info> являются уникальными для развертывания.

Создание обновлений и повторное развертывание

После обновления кода выполните предыдущую az containerapp up команду еще раз. Команда перестроит образ и повторно развернет его в Azure Container Apps. При повторном выполнении команды он обнаруживает, что группа ресурсов и приложение уже существуют, и обновляет только приложение контейнера.

В более сложных сценариях обновления можно использовать команды az acr build и az containerapp update вместе, чтобы перезадеплоить и обновить приложение контейнера.

Очистка

Все ресурсы Azure, созданные в этом руководстве, находятся в одной группе ресурсов. При удалении группы ресурсов все ресурсы в группе ресурсов удаляются. Это самый быстрый способ удалить все Azure ресурсы, используемые для вашего приложения.

Чтобы удалить ресурсы, используйте команду az group delete .

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

Вы также можете удалить группу на портале Azure/c0> или в Visual Studio Code с помощью расширения Azure tools.

Дальнейшие шаги

Дополнительные сведения см. в следующих ресурсах: