Развертывание контейнерного веб-приложения Flask или FastAPI в службе приложение Azure
В этом руководстве показано, как развернуть веб-приложение Python Flask или FastAPI для приложение Azure службы с помощью функции веб-приложения для контейнеров. Веб-приложение для контейнеров позволяет разработчикам легко использовать полностью управляемую платформу службы приложение Azure, но которые также хотят, чтобы один развернутый артефакт, содержащий приложение и все его зависимости. Дополнительные сведения об использовании контейнеров в Azure см. в статье "Сравнение параметров контейнера Azure".
В этом руководстве вы используете интерфейс командной строки Docker и Docker, чтобы при необходимости создать образ Docker и протестировать его локально. Azure CLI используется для создания образа Docker в Реестр контейнеров Azure и его развертывания в службе приложение Azure. Веб-приложение настроено с помощью управляемого удостоверения, назначаемого системой (подключения без пароля) и доступа на основе ролей Azure для извлечения образа Docker из Реестр контейнеров Azure во время развертывания. Вы также можете развернуть с помощью Visual Studio Code с установленным расширением средств Azure.
Пример создания и создания образа Docker для запуска в приложениях контейнеров Azure см. в статье "Развертывание веб-приложения Flask или FastPI" в приложениях контейнеров Azure.
Примечание.
В этом руководстве показано создание образа Docker, который затем можно запустить на Служба приложений. Это не обязательно для использования Служба приложений. Вы можете развернуть код непосредственно из локальной рабочей области, чтобы Служба приложений без создания образа Docker. Пример см. в кратком руководстве по развертыванию веб-приложения Python (Django или Flask) в приложение Azure службе.
Необходимые компоненты
Для работы с этим учебником необходимы указанные ниже компоненты.
Учетная запись Azure, в которой можно развернуть веб-приложение для приложение Azure службы и Реестр контейнеров Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
Azure CLI для создания образа Docker и его развертывания в Служба приложений. Кроме того, Docker и Интерфейс командной строки Docker для создания Dockerи тестирования его в локальной среде.
Получение кода примера
В локальной среде получите код.
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git
cd msdocs-python-flask-webapp-quickstart
Добавление файлов 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, вам не нужно указывать его расположение в 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
Сборка и запуск образа локально
Создайте образ локально.
Примечание.
docker build
Если команда возвращает ошибку, убедитесь, что docker deamon выполняется. В Windows убедитесь, что Docker Desktop запущен.
Локально запустите образ в контейнере Docker.
docker run --detach --publish 5000:50505 flask-demo
Откройте URL-адрес в браузере http://localhost:5000
, чтобы увидеть веб-приложение, работающее локально.
Параметр --detach
запускает контейнер в фоновом режиме. Параметр --publish
сопоставляет порт контейнера с портом на узле. Порт узла (внешний) сначала находится в паре, а порт контейнера (внутренний) является вторым. Дополнительные сведения приведены в статье со справочными сведениями о запусках Docker.
Создание группы ресурсов и Реестр контейнеров Azure
Выполните команду az login, чтобы войти в Azure.
az login
Выполните команду az upgrade, чтобы убедиться, что текущая версия Azure CLI.
az upgrade
Создайте группу с помощью команды az group create .
az group create --name web-app-simple-rg --location eastus
Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими. При создании группы ресурсов укажите расположение, например eastus.
Создайте Реестр контейнеров Azure с помощью команды az acr create.
az acr create --resource-group web-app-simple-rg \ --name webappacr123 --sku Basic
Примечание.
Имя реестра должно быть уникальным в Azure. Если вы получите ошибку, попробуйте другое имя. Имена реестра могут состоять из 5–50 буквенно-цифровых символов. Дефисы и подчеркивания не допускаются. Дополнительные сведения см. в Реестр контейнеров Azure правилах имен. Если вы используете другое имя, убедитесь, что вы используете имя, а не
webappacr123
в командах, ссылающихся на артефакты реестра и реестра в следующих разделах.Реестр контейнеров Azure — это частный реестр Docker, который хранит образы для использования в Экземпляры контейнеров Azure, службе приложение Azure, Служба Azure Kubernetes и других службах. При создании реестра укажите имя, номер SKU и группу ресурсов.
Создание образа в Реестр контейнеров Azure
Создайте образ Docker в Azure с помощью команды az acr build . Команда использует Dockerfile в текущем каталоге и отправляет образ в реестр.
az acr build \
--resource-group web-app-simple-rg \
--registry webappacr123 \
--image webappsimple:latest .
Параметр --registry
задает имя реестра, а --image
параметр задает имя образа. Имя изображения находится в формате registry.azurecr.io/repository:tag
.
Развертывание веб-приложения в Azure
Создайте план Служба приложений с помощью команды az appservice plan.
az appservice plan create \ --name webplan \ --resource-group web-app-simple-rg \ --sku B1 \ --is-linux
Задайте для переменной среды идентификатор подписки. Он используется в параметре в следующей
--scope
команде.SUBSCRIPTION_ID=$(az account show --query id --output tsv)
Команда для создания переменной среды показана для оболочки Bash. Измените синтаксис в соответствии с другими средами.
Создайте веб-приложение с помощью команды az webapp create .
az webapp create \ --resource-group web-app-simple-rg \ --plan webplan --name webappsimple123 \ --assign-identity [system] \ --role AcrPull \ --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/web-app-simple-rg \ --acr-use-identity --acr-identity [system] \ --container-image-name webappacr123.azurecr.io/webappsimple:latest
Примечания:
Имя веб-приложения должно быть уникальным в Azure. Если вы получите ошибку, попробуйте другое имя. Имя может состоять из буквенно-цифровых символов и дефисов, но не может начинаться или заканчиваться дефисом. Дополнительные сведения см . в правилах имен Microsoft.Web.
Если вы используете имя, отличное от
webappacr123
имени Реестр контейнеров Azure, убедитесь, что вы соответствующим образом обновите--container-image-name
параметр.Параметр
--assign-identity
и--role
--scope
параметры позволяют управляемому удостоверению, назначаемого системой, в веб-приложении, и назначить ейAcrPull
роль в группе ресурсов. Это дает управляемому удостоверению разрешение на извлечение изображений из любой Реестр контейнеров Azure в группе ресурсов.--acr-identity
Параметры--acr-use-identity
настраивают веб-приложение для использования управляемого удостоверения, назначаемого системой, для извлечения образов из Реестр контейнеров Azure.Создание веб-приложения может занять несколько минут. Журналы развертывания можно проверить с помощью команды az webapp log tail . Например,
az webapp log tail --resource-group web-app-simple-rg --name webappsimple123
. Если в них отображаются записи с "прогреванием", развертывается контейнер.URL-адрес веб-приложения,
<web-app-name>.azurewebsites.net
напримерhttps://webappsimple123.azurewebsites.net
.
Создание обновлений и повторное развертывание
После внесения изменений кода можно повторно развернуть для Служба приложений с помощью команд az acr build и az webapp update.
Очистка
Все ресурсы Azure, созданные в этом руководстве, находятся в одной группе ресурсов. Удаление группы ресурсов удаляет все ресурсы в группе ресурсов и является самым быстрым способом удаления всех ресурсов Azure, используемых для вашего приложения.
Чтобы удалить ресурсы, используйте команду az group delete .
az group delete --name web-app-simple-rg
Вы также можете удалить группу в портал Azure или в Visual Studio Code и расширении средств Azure.
Следующие шаги
Дополнительные сведения см. на следующих ресурсах: