Развертывание веб-приложения 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, установленные в локальной среде.
Получение кода примера
В локальной среде получите код.
Добавление файлов 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.
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 .
Вы также можете удалить группу в портал Azure или в Visual Studio Code и расширении средств Azure.
Следующие шаги
Дополнительные сведения см. на следующих ресурсах: