Развертывания контейнеров службы приложений с помощью интерфейса командной строки разработчика Azure

Azure Developer CLI (azd) позволяет развернуть ваше приложение в Служба приложений Azure. Этот режим развертывания запускает приложение как веб-приложение Linux для контейнеров. Если служба использует host: appservice со сборкой на основе Docker, azd deploy создает образ, отправляет его в Реестр контейнеров Azure (ACR) и настраивает существующий сайт службы приложений на использование нового образа.

Поскольку azd deploy обновляет только ссылку на образ, ваша инфраструктура должна подготовить сайт к работе в контейнере перед развертыванием. Зная, что ожидает этот режим развертывания, вы можете правильно настроить сайт и избежать неудачных развертываний.

В этой статье объясняется, как работает этот режим развертывания, какая инфраструктура уже должна настраиваться и как она отличается от containerapp узла. Предполагается, что вы знакомы с проектами azd , azure.yamlа также azd командами подготовки и развертывания.

Как azd развертывает контейнер в Службе приложений

Когда служба задает host: appservice конфигурацию контейнера, azd deploy обрабатывает целевой сайт как веб-приложение для контейнеров и выполняет следующие действия:

  • Создает образ контейнера из вашего Dockerfile.
  • Отправляет образ в реестр ACR, указанный в вашей инфраструктуре.
  • Обновляет параметр сайта DOCKER|<image> на linuxFxVersion, чтобы сайт запускал ваш образ.

azd deploy обновляет только ссылку на образ для существующего сайта. Он не создает или не настраивает базовую инфраструктуру, поэтому сайт должен быть готов к контейнеру перед развертыванием.

Конфигурация службы в файле azure.yaml

Развертывание контейнера в службе приложений используется host: appservice со сборкой на основе Docker. Задайте language: docker, или добавьте конфигурацию docker, указывающую на ваш Dockerfile:

services:
  web:
    project: ./src/web
    host: appservice
    language: docker
    docker:
      path: ./Dockerfile

С помощью этой конфигурации azd собирает образ из ./src/web/Dockerfile, отправляет его в ваш реестр и обновляет сайт App Service для запуска этого образа. Хост appservice не применяет параметры уровня службы env:, поэтому вместо этого настройте параметры приложения с помощью вашей инфраструктуры.

Требования к инфраструктуре для сайта App Service с поддержкой контейнеров

azd deploy не подготавливает и не изменяет инфраструктуру для хоста appservice, поэтому необходимо с помощью имеющихся конфигураций Bicep или Terraform настроить сайт как приложение-контейнер Linux перед развертыванием. Инфраструктура должна соответствовать следующему контракту:

Требование Сведения
План службы приложений Linux План работает под управлением Linux (kind: linux с reserved: true). Служба приложений поддерживает контейнеры только в Linux, а не Windows.
Сайт, готовый к контейнеризации linuxFxVersion сайта использует значение DOCKER\|. Изображение-заполнитель подойдет, так как azd deploy заменяет его изображением, которое он создает и публикует.
Один контейнер Сайт работает в одном контейнере. Узел appservice не поддерживает конфигурации с несколькими контейнерами или Docker Compose.
Доступ к ACR с помощью управляемой идентичности Сайт проходит аутентификацию в ACR с помощью управляемого пользователем идентификатора, например acrUseManagedIdentityCreds: true с acrUserManagedIdentityID. Узел appservice не поддерживает учетные данные администратора.

azd deploy в сравнении с provision и up

Развертывание контейнера в App Service охватывает два аспекта — инфраструктуру и код приложения, которым соответствуют разные команды azd:

Command Что делает Когда его использовать
azd provision Создает и настраивает ресурсы Azure на основе шаблонов Bicep или Terraform, включая сайт Azure App Service с поддержкой контейнеров и ACR. Используйте его, если инфраструктура изменяется или сайт еще не существует.
azd deploy Создает образ, отправляет его в ACR и обновляет ссылку на образ сайта. Это не касается инфраструктуры. Используйте его для отправки изменений приложения на уже подготовленный сайт.
azd up Запускает azd provision, а затем azd deploy одной командой. Используйте это для первого развертывания или если хотите одновременно подготовить ресурсы и выполнить развертывание.

Поскольку azd deploy обновляет только ссылку на образ, развертывание контейнера appservice всегда зависит от инфраструктуры, которую ранее создали azd provision или azd up.

Проверка готовности развертывания

Перед обновлением сайта azd deploy проверяет, готов ли целевой сайт к работе с контейнерами. Если сайт не является приложением-контейнером Linux, например использует план Windows, не имеет значения DOCKER|linuxFxVersion или не имеет доступа к ACR через управляемое удостоверение, то azd deploy останавливается и возвращает ошибку, указывающую на отсутствующую конфигурацию. Исправьте инфраструктуру и повторно подготовьте её перед повторным развертыванием.

Контейнеры службы приложений по сравнению с приложениями-контейнерами

Хосты appservice и containerapp развертывают контейнерные образы, но по-разному управляют инфраструктурой и конфигурацией:

Behavior appservice хост containerapp хост
Конфигурация инфраструктуры azd deploy обновляет только ссылку на образ и ожидает, что сайт уже готов к контейнеру. Подготавливает и настраивает для вас большую часть среды выполнения контейнеров.
Переменные среды Не применяет параметры уровня env: обслуживания. Настройте параметры приложения с помощью инфраструктуры. Применяет параметры уровня env: обслуживания к контейнеру.
Поддержка многоязычности Контейнеризует приложения, написанные на любом языке, с помощью language: docker, что полезно для сред выполнения без встроенной поддержки azd. Контейнеризует приложения на любом языке с помощью language: docker, что полезно для сред выполнения без встроенной поддержки azd.