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


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

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

В этом руководстве вы используете Интерфейс командной строки Docker и Docker для сборки и тестирования образа Docker локально при необходимости. Затем вы используете Azure CLI , чтобы отправить образ Docker в реестр контейнеров Azure (ACR) и развернуть его в Службе приложений Azure. Веб-приложение настроено с использованием назначенной системой управляемой идентичности для безопасного доступа без пароля к извлечению образа из ACR, с помощью управления доступом на основе ролей Azure (RBAC). Также возможно развертывание с помощью Visual Studio Code с установленным расширением Azure Tools.

Пример создания и создания образа Docker для запуска в приложениях контейнеров Azure см. в статье "Развертывание веб-приложения Flask или FastPI" в приложениях контейнеров Azure.

Примечание.

В этом руководстве показано, как создать образ Docker, который можно развернуть в Службе приложений Azure. Однако использование образа Docker не требуется для развертывания в Службе приложений. Вы также можете развернуть код приложения непосредственно из локальной рабочей области в Службе приложений без создания образа Docker. Чтобы увидеть пример, смотрите Краткое руководство: Развертывание веб-приложения Python (Django или Flask) в службе приложений Azure.

Предварительные условия

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

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

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

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==3.1.0
gunicorn

Добавьте файл 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 --tag flask-demo .

Примечание.

docker build Если команда возвращает ошибку, убедитесь, что docker deamon выполняется. В Windows убедитесь, что Docker Desktop запущен.

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

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

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

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

Создание группы ресурсов и Реестр контейнеров Azure

  1. Выполните команду az login, чтобы войти в Azure.

    az login
    
  2. Выполните команду az upgrade, чтобы убедиться, что у вас актуальная версия Azure CLI.

    az upgrade
    
  3. Создайте группу с помощью команды az group create .

    RESOURCE_GROUP_NAME=<resource-group-name>
    LOCATION=<location>
    az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
    

    Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими. При создании группы ресурсов укажите расположение, например eastus. Замените <location> на место, которое вы выбираете. Некоторые номера SKU недоступны в определенных расположениях, поэтому вы можете получить ошибку, указывающую на это. Используйте другое расположение и повторите попытку.

  4. Создайте Реестр контейнеров Azure с помощью команды az acr create. Замените <container-registry-name> уникальным названием для вашего экземпляра.

    CONTAINER_REGISTRY_NAME=<container-registry-name>
    az acr create --resource-group $RESOURCE_GROOUP_NAME \
    --name $CONTAINER_REGISTRY_NAME --sku Basic
    

    Примечание.

    Имя реестра должно быть уникальным в Azure. Если вы получите ошибку, попробуйте другое имя. Имена реестра могут состоять из 5–50 буквенно-цифровых символов. Дефисы и подчеркивания не допускаются. Дополнительные сведения см. в статье Правила именования в Azure Container Registry. Если вы используете другое имя, убедитесь, что вы используете своё имя, а не webappacr123 в командах, ссылающихся на реестр и артефакты реестра в следующих разделах.

    Реестр контейнеров Azure — это частный реестр Docker, который хранит образы для использования в экземплярах Azure Container Instances, службе приложений Azure, службе Azure Kubernetes и других сервисах. При создании реестра укажите имя, номер SKU и группу ресурсов.

Создание образа в Реестр контейнеров Azure

Создайте образ Docker в Azure с помощью команды az acr build . Команда использует Dockerfile в текущем каталоге и отправляет образ в реестр.

az acr build \
  --resource-group $RESOURCE_GROUP_NAME \
  --registry $CONTAINER_REGISTRY_NAME \
  --image webappsimple:latest .

Параметр --registry задает имя реестра, а --image параметр задает имя образа. Имя изображения находится в формате registry.azurecr.io/repository:tag.

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

  1. Создайте план службы приложений с помощью команды az appservice plan.

    az appservice plan create \
    --name webplan \
    --resource-group $RESOURCE_GROUP_NAME \
    --sku B1 \
    --is-linux
    
  2. Установите переменную среды на ID вашей подписки. Он используется в --scope параметре в следующей команде.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    

    Команда для создания переменной среды показана для оболочки Bash. Измените синтаксис в соответствии с другими средами.

  3. Создайте веб-приложение с помощью команды az webapp create .

    export MSYS_NO_PATHCONV=1 # This line is for Windows users to prevent path conversion issues in Git Bash.
    az webapp create \
    --resource-group $RESOURCE_GROUP_NAME \
    --plan webplan --name <container-registry-name> \
    --assign-identity [system] \
    --role AcrPull \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME \
    --acr-use-identity --acr-identity [system] \
    --container-image-name $CONTAINER_REGISTRY_NAME.azurecr.io/webappsimple:latest 
    

    Примечания:

    • Имя веб-приложения должно быть уникальным в Azure. Если вы получите ошибку, попробуйте другое имя. Имя может состоять из буквенно-цифровых символов и дефисов, но не может начинаться или заканчиваться дефисом. Чтобы узнать больше, см. правила имен Microsoft.Web.

    • Если вы используете имя, отличное от webappacr123, для вашего Реестра контейнеров Azure, убедитесь, что вы соответственно обновите параметр --container-image-name.

    • Параметры --assign-identity, --role и --scope позволяют включить управляемое удостоверение, назначенное системой, в веб-приложении и назначить ему роль AcrPull в группе ресурсов. Это дает управляемому удостоверению разрешение на получение образов из любого реестра контейнеров Azure в группе ресурсов.

    • --acr-use-identity и --acr-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 $RESOURCE_GROUP_NAME --yes --no-wait

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

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

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