Перенос приложений Docker Compose на сайдкары в Службе приложений Azure

Если вы запускаете приложение Docker Compose в Службе приложений Azure, его следует перенести на боковики. Существует две основные стратегии миграции приложения Docker Compose в сайдкары.

  • Миграция на основе скриптов — рекомендуется для простых настроек.
  • Ручная миграция

Предпосылки

  • PowerShell
  • Azure CLI (Интерфейс командной строки для Azure)
  • Docker (для создания и отправки изображений)

Миграция с помощью скрипта

Если файл Docker Compose прост, можно использовать официальный скрипт миграции для автоматизации процесса.

Это важно

Перед запуском скрипта миграции всегда создайте резервную копию приложения на портале Azure.

  1. Скачайте скрипт миграции из репозитория GitHub примеров Azure.

  2. Запустите скрипт в PowerShell, указав идентификатор подписки, имя веб-приложения, группу ресурсов, URL-адрес реестра, файл Docker Compose в кодировке Base64, имя основной службы и целевой порт.

    ./update-webapp.ps1 `
      -subscriptionId "<subscriptionId>" `
      -webAppName "<webAppName>" `
      -resourceGroup "<resourceGroup>" `
      -registryUrl "<registryUrl>" `
      -base64DockerCompose "<base64DockerCompose>" `
      -mainServiceName "<mainServiceName>" `
      -targetPort "<targetPort>"
    

    Если для реестра требуется проверка подлинности, скрипт попросит вас предоставить dockerRegistryServerUsername и dockerRegistryServerPassword интерактивно.

Миграция вручную

  1. Войдите в Azure и настройте подписку.

    az login
    az account set --subscription <your-subscription-id>
    
  2. Сбор необходимых сведений.

    az account show --query id --output tsv
    az webapp list --query "[].{name:name}" --output tsv
    az group list --query "[].{name:name}" --output tsv
    az acr list --query "[].{name:name}" --output tsv
    

    Это поможет вам определить идентификатор подписки, имя приложения, группу ресурсов и реестр контейнеров Azure.

  3. Создайте слот развертывания. Перед переключением слота в продакшн-среду вы проверите перенесенные сайдкары.

    az webapp deployment slot create --name <webapp-name> --resource-group <resource-group> --slot <slot-name>
    
  4. Декодирование существующей конфигурации Docker Compose из рабочего приложения.

    az webapp config show --name <webapp-name> --resource-group <resource-group> --query linuxFxVersion
    

    Скопируйте часть base64 из выходных данных и декодируйте ее в PowerShell:

    [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("<base64value>"))
    
  5. Для каждой службы в файле Compose создайте соответствующий container ресурс в слоте развертывания по sitecontainers URL-адресу:

    az rest --method PUT \
      --url https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<webapp-name>/slots/<slot-name>/sitecontainers/<container-name>?api-version=2023-12-01 \
      --body '{"name":"<container-name>", "properties":{"image":"<image-name>", "isMain": <true/false>, "targetPort": <port>}}'
    
    • Используйте сопоставление атрибутов Docker Compose и конфигурации сайдкара, чтобы помочь вам в сопоставлении.

    • Используйте нужное имя <container-name>контейнера.

    • Установите isMain для основного контейнера приложения и false для сайдкаров.

    • Для <image-name> используйте полный путь к изображению, содержащий имя сервера. Рассмотрим пример.

      "image":"myregistry.azurecr.io/myapp/backend:latest"
      
    • Повторите для всех контейнеров.

  6. Переключите слот развертывания, чтобы использовать режим sidecar.

    az webapp config set --name <webapp-name> --resource-group <resource-group> --slot <slot-name> --linux-fx-version "sitecontainers"
    
  7. Перезапустите слот развертывания, а затем проверьте функциональность перенесенного приложения в слоте развертывания.

    az webapp restart --name <webapp-name> --resource-group <resource-group> --slot <slot-name>
    
  8. После проверки переключите слот на рабочую среду:

    az webapp deployment slot swap --name <webapp-name> --resource-group <resource-group> --slot <slot-name> --target-slot production
    

Сопоставление атрибутов Docker Compose и конфигурации сайдкара

Следующие поля Docker Compose сопоставляются с конфигурацией сайдкара.

Docker Compose Конфигурация сайдкара Примечания.
command, entrypoint startUpCommand
environment environmentVariables
image image
ports targetPort Для внешнего трафика поддерживаются только порты 80 и 8080.
volumes volumeMounts Постоянное хранилище Azure не поддерживается.

Следующие поля Docker Compose не поддерживаются в сайдкарах:

Поле Docker Compose Поддержка Примечания.
build Не разрешенный Предварительная сборка и отправка образов в реестр.
depends_on Проигнорировано Порядок запуска контейнера не гарантируется.
networks Проигнорировано Администрирование сети осуществляется внутренним образом.
secrets Проигнорировано Используйте настройки службы App Service или Key Vault для секретов.
volumes с использованием {WEBAPP_STORAGE_HOME} или {WEBSITES_ENABLE_APP_SERVICE_STORAGE} Не поддерживается

Ограничения и рекомендации по миграции

В следующей таблице показаны функции, которые в настоящее время поддерживаются в приложениях Docker Compose, но не поддерживаются или имеют ограниченную поддержку в контейнерах sidecar.

Функция Docker Compose Сайдкар
Хранение Общие тома между контейнерами Ограниченное постоянное хранилище для конкретного контейнера
Нетворкинг Имена служб в качестве имен хостов Все контейнеры используют localhost совместно; требуются уникальные порты.
Ведение журнала и мониторинг Пользовательские драйверы, внешние инструменты Интеграция с Azure Monitor и Log Analytics
Среда службы приложений (ASE). Поддерживается Пока не поддерживается
Национальные облака Поддерживается Пока не поддерживается

Дополнительные ресурсы