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

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

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

Необходимые компоненты

Для работы с этим учебником необходимы указанные ниже компоненты.

  • Учетная запись Azure, в которой можно развернуть веб-приложение в приложениях контейнеров Azure. (An Реестр контейнеров Azure и рабочая область Log Analytics создаются для вас в процессе.)

  • Azure CLI, Docker и Docker CLI, установленные в локальной среде.

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

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

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", "app:app"]

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

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

Flask==2.2.2
gunicorn
Werkzeug==2.2.2

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

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

Настройка gunicorn

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

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

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

docker build --tag flask-demo .

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

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

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

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

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

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

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

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

  • Реестр контейнеров Azure
  • Среда приложений-контейнеров
  • Приложение-контейнер под управлением образа веб-приложения
  • Рабочая область Log Analytics

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

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

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

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

Очистка

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

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

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

Вы также можете удалить группу в портал Azure или в Visual Studio Code и расширении средств Azure.

Следующие шаги

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