Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве показано, как развернуть веб-приложение 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.
Предварительные условия
Для работы с этим учебником необходимы указанные ниже компоненты.
Учетная запись Azure, для развертывания веб-приложения в службе приложений Azure и реестре контейнеров Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
Azure CLI для создания образа Docker и его развертывания в Служба приложений. Кроме того, Docker и Docker CLI для создания 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==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
Если команда возвращает ошибку, убедитесь, что docker deamon выполняется. В Windows убедитесь, что Docker Desktop запущен.
Локально запустите образ в контейнере Docker.
docker run --detach --publish 5000:50505 flask-demo
Откройте URL-адрес в браузере http://localhost:5000
, чтобы увидеть веб-приложение, работающее локально.
Параметр --detach
запускает контейнер в фоновом режиме. Параметр --publish
сопоставляет порт контейнера с портом на узле. Порт узла (внешний) первый в паре, и порт контейнера (внутренний) второй. Для получения дополнительной информации см. справочник по команде Docker run.
Создание группы ресурсов и Реестр контейнеров Azure
Выполните команду az login, чтобы войти в Azure.
az login
Выполните команду az upgrade, чтобы убедиться, что у вас актуальная версия Azure CLI.
az upgrade
Создайте группу с помощью команды 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 недоступны в определенных расположениях, поэтому вы можете получить ошибку, указывающую на это. Используйте другое расположение и повторите попытку.Создайте Реестр контейнеров 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
Создайте план службы приложений с помощью команды az appservice plan.
az appservice plan create \ --name webplan \ --resource-group $RESOURCE_GROUP_NAME \ --sku B1 \ --is-linux
Установите переменную среды на ID вашей подписки. Он используется в
--scope
параметре в следующей команде.SUBSCRIPTION_ID=$(az account show --query id --output tsv)
Команда для создания переменной среды показана для оболочки Bash. Измените синтаксис в соответствии с другими средами.
Создайте веб-приложение с помощью команды 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.
Следующие шаги
Дополнительные сведения см. на следующих ресурсах: