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

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

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

Примечание.

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

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

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

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

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

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, вам не нужно указывать его расположение в 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.

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

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

    az group create --name web-app-simple-rg --location eastus
    

    Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими. При создании группы ресурсов укажите расположение, например eastus.

  2. Создайте Реестр контейнеров Azure с помощью команды az acr create.

    az acr create --resource-group web-app-simple-rg \
    --name webappacr123 --sku Basic --admin-enabled true
    

    Примечание.

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

    Реестр контейнеров Azure — это частный реестр Docker, который хранит образы для использования в Экземпляры контейнеров Azure, службе приложение Azure, Служба Azure Kubernetes и других службах. При создании реестра укажите имя, номер SKU и группу ресурсов. Вторая команда сохраняет пароль в переменную с помощью команды az credential show . Пароль используется для проверки подлинности в реестре на следующем шаге.

  3. Задайте для переменной среды значение пароля для реестра.

    ACR_PASSWORD=$(az acr credential show \
    --resource-group web-app-simple-rg \
    --name webappacr123 \
    --query "passwords[?name == 'password'].value" \
    --output tsv)
    

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

    Вы также можете получить пароль (ACR_PASSWORD) из портал Azure, перейдя в реестр, выбрав ключи доступа и скопируйте пароль.

Создание образа в Реестр контейнеров 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

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

    az appservice plan create \
    --name webplan \
    --resource-group web-app-simple-rg \
    --sku B1 \
    --is-linux
    
  2. Создайте веб-приложение с помощью команды az webapp create .

    az webapp create \
    --resource-group web-app-simple-rg \
    --plan webplan --name webappsimple123 \
    --docker-registry-server-password $ACR_PASSWORD \
    --docker-registry-server-user webappacr123 \
    --role acrpull \
    --deployment-container-image-name webappacr123.azurecr.io/webappsimple:latest 
    

    Примечания:

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

    • Если вы используете имя, отличное webappacr123 от имени Реестр контейнеров Azure, убедитесь, что вы соответствующим образом обновите --docker-registry-server-user и --deployment-container-image-name параметры.

    • Создание веб-приложения может занять несколько минут. Журналы развертывания можно проверка с помощью команды 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.

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

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