Перенос пользовательского программного обеспечения в Службу приложений Azure с помощью пользовательского контейнера

служба приложение Azure предоставляет предварительно определенные стеки приложений, например ASP.NET или Node.js в Windows. Эти стеки приложений выполняются в службах IIS. Предварительно настроенная среда Windows блокирует в операционной системе следующее:

  • Административный доступ.
  • установки программного обеспечения;
  • изменения в глобальном кэше сборок.

Дополнительные сведения см. в статье Функциональные возможности операционной системы для службы приложений Azure.

Вы можете развернуть специально настроенный образ Windows из Visual Studio, чтобы внести в ОС изменения, необходимые для вашего приложения. Это упрощает перенос локального приложения, требующего настраиваемой ос и конфигурации программного обеспечения. В этом руководстве показано, как перенести в службу приложений приложение ASP.NET, которое использует пользовательские шрифты, установленные в библиотеке шрифтов Windows. Вы развертываете настраиваемый образ Windows из Visual Studio в Реестр контейнеров Azure, а затем запускаете его в Служба приложений.

Показано веб-приложение, выполняемое в контейнере Windows.

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

Для работы с этим руководством:

Настройка приложения в локальной среде

Скачивание примера приложения

На этом шаге вы настроите локальный проект .NET.

Пример проекта содержит простое приложение ASP.NET, использующее настраиваемый шрифт, установленный в библиотеке шрифтов Windows. Устанавливать шрифты необязательно. Однако примером является пример приложения, интегрированного с базовой ОС. Чтобы перенести такое приложение в службу приложений, переработайте код, чтобы удалить интеграцию, либо перенесите его "как есть" в пользовательском контейнере Windows.

Установка шрифта

В проводнике Windows перейдите в папку custom-font-win контейнер master/CustomFontSample, щелкните правой кнопкой мыши файл FrederickatheGreat Regular.ttf и выберите Установить.

Этот шрифт находится в свободном доступе на веб-сайте Google Fonts.

Выполнить приложение

Откройте файл custom-font-win-container-master/CustomFontSample.sln в Visual Studio.

Нажмите клавиши CTRL+F5 , чтобы запустить приложение без отладки. Это приложение откроется в браузере по умолчанию.

Снимок экрана: приложение, отображаемое в браузере по умолчанию.

Так как приложение использует установленный шрифт, оно не может работать в песочнице Службы приложений. Тем не менее его можно развернуть с помощью контейнера Windows, так как шрифт можно установить в контейнер Windows.

Настройка контейнера Windows

В обозревателе решений щелкните правой кнопкой мыши проект CustomFontSample и выберите Добавить>Container Orchestration Support (Поддержка оркестрации контейнеров).

Снимок экрана: окно Обозреватель решений с проектом CustomFontSample. Выбраны пункты меню

Выберите Docker Compose>ОК.

Теперь проект настроен для запуска в контейнере Windows. Добавляется в Dockerfile проект CustomFontSample, а проект docker-compose добавляется в решение.

В обозревателе решений откройте Dockerfile.

Необходимо использовать поддерживаемый родительский образ. Измените родительский образ, заменив строку FROM приведенным ниже кодом.

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019

В конце файла добавьте приведенную ниже строку, после чего сохраните файл.

RUN ${source:-obj/Docker/publish/InstallFont.ps1}

Файл InstallFont.ps1 можно найти в проекте CustomFontSample. Это простой сценарий, который устанавливает шрифт. Более сложную версию скрипта можно найти в коллекция PowerShell.

Примечание.

Чтобы протестировать контейнер Windows локально, убедитесь, что на локальном компьютере запущен Docker.

Публикация в Реестре контейнеров Azure

В Реестре контейнеров Azure можно хранить образы для развертывания контейнеров. Вы можете настроить Служба приложений для использования изображений, размещенных в Реестр контейнеров Azure.

Запуск мастера публикации

Щелкните правой кнопкой мыши проект CustomFontSample в обозревателе решений и выберите Опубликовать.

Снимок экрана: Обозреватель решений с проектом CustomFontSample. Выбран элемент меню

Создание и публикация реестра

В мастере публикации выберите Реестр контейнеров>Создать реестр контейнеров Azure>Опубликовать.

Снимок экрана мастера публикации. Реестр контейнеров, создание Реестр контейнеров Azure и кнопка

Вход с помощью учетной записи Azure

В диалоговом окне "Создание нового Реестр контейнеров Azure" выберите "Добавить учетную запись" и войдите в подписку Azure. Если вы уже вошли в систему, выберите учетную запись, содержащую необходимую подписку, в раскрывающемся меню.

Снимок экрана: вход в Azure.

Настройка реестра

Настройте новый реестр контейнеров с помощью предлагаемых значений в следующей таблице в качестве руководства. По завершении выберите Создать.

Параметр Предлагаемое значение
DNS-префикс Оставьте имя созданного реестра или измените его, указав другое уникальное имя.
Группа ресурсов Выберите Создать, введите myResourceGroup и нажмите ОК.
SKU Базовый. Дополнительные сведения см. в разделе Ценовые категории.
Расположение реестра Западная Европа

Снимок экрана: страница

Откроется окно терминала и отображается ход развертывания образа. Дождитесь завершения развертывания.

Вход в Azure

Войдите на портал Azure.

Создание веб-приложения.

В меню слева выберите Создать ресурс>Веб>Веб-приложение для контейнеров.

Настройка основных сведений приложения

На вкладке "Основные сведения" настройте параметры в соответствии со следующей таблицей. Затем нажмите кнопку Далее: Docker.

Параметр Предлагаемое значение
Подписка Убедитесь, что отображается правильная подписка.
Группа ресурсов Выберите Создать, введите myResourceGroup и щелкните ОК.
Имя Введите уникальное имя. URL-адрес веб-приложения: https://<app-name>.azurewebsites.net, где <app-name> — имя приложения.
Опубликовать Контейнер Docker
Операционная система Windows
Регион Западная Европа
План Windows Выберите Создать, введите myAppServicePlan и нажмите ОК.

Вкладка Основные сведения должна выглядеть следующим образом:

Снимок экрана: вкладка

Настройка контейнера Windows

На вкладке Docker настройте пользовательский контейнер Windows, как показано в следующей таблице, а затем нажмите кнопку "Проверить и создать".

Параметр Предлагаемое значение
Источник образа Реестр контейнеров Azure
Реестр Выберите созданный ранее реестр.
Изображение customfontsample
Тег latest

Завершение создания приложения

Нажмите Создать и подождите, пока Azure создаст необходимые ресурсы.

Переход к веб-приложению

По завершении развертывания отобразится окно уведомлений.

Показано сообщение о том, что операция Azure завершена.

  1. Выберите Перейти к ресурсу.

  2. На странице приложения щелкните ссылку в разделе URL.

В браузере откроется следующая страница:

Показана новая страница браузера для веб-приложения.

Подождите несколько минут и повторите попытку, пока не получите домашнюю страницу с ожидаемым шрифтом:

Снимок экрана: домашняя страница с настроенным шрифтом.

Поздравляем! Вы перенесли приложение ASP.NET в Службу приложений Azure в контейнере Windows.

Просмотр журналов запуска контейнера

Загрузка контейнера Windows может занять некоторое время. Чтобы просмотреть ход выполнения, перейдите по следующему URL-адресу. (Замените <имя> приложения именем приложения.)

https://<app-name>.scm.azurewebsites.net/api/logstream

Потоковые журналы выглядят следующим образом:

14/09/2018 23:16:19.889 INFO - Site: fonts-win-container - Creating container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest.
14/09/2018 23:16:19.928 INFO - Site: fonts-win-container - Create container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest succeeded. Container Id 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:23.405 INFO - Site: fonts-win-container - Start container succeeded. Container: 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Configuring container
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container start-up and configuration completed successfully

Служба приложений Azure использует технологию контейнеров Docker для размещения встроенных и пользовательских образов. Чтобы просмотреть список встроенных образов, выполните команду Azure CLI 'az webapp list-runtimes --os linux'. Если эти образы не соответствуют вашим требованиям, вы можете создать и развернуть пользовательский образ.

Примечание.

Контейнер должен ориентироваться на архитектуру x86-64. ARM64 не поддерживается.

В этом руководстве описано следующее:

  • Отправьте пользовательский образ Docker в Реестр контейнеров Azure.
  • Разверните пользовательский образ в Служба приложений.
  • Настройте переменные среды.
  • Извлеките изображение в Служба приложений с помощью управляемого удостоверения.
  • Доступ к журналам диагностики.
  • Включите CI/CD из Реестр контейнеров Azure в Служба приложений.
  • Подключитесь к контейнеру с помощью SSH.

В этом руководстве взимается небольшая плата за учетную запись Azure для реестра контейнеров и может нести дополнительные затраты, если вы размещаете контейнер дольше месяца.

Настройка начальной среды

Для работы с этим учебником требуется Azure CLI версии 2.0.80 или более поздней. Если вы используете Azure Cloud Shell, последняя версия уже установлена.

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

  • Установите Docker для создания образов Docker. Для установки Docker может потребоваться перезагрузка компьютера.

После установки Docker откройте окно терминала и убедитесь, что Docker установлен.

docker --version

Клонирование или скачивание примера приложения

Чтобы получить пример для работы с этим руководством, его можно клонировать с помощью Git или скачать.

Клонирование с помощью Git

Клонируйте репозиторий примера.

git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input

Убедитесь, что аргумент гарантирует правильную --config core.autocrlf=input конец строки в файлах, используемых в контейнере Linux.

Затем перейдите к папке:

cd docker-django-webapp-linux

Загрузка с GitHub

Вместо использования клона Git можно посетить и выбрать ZIP-файл "Локальный>скачивание кода>".https://github.com/Azure-Samples/docker-django-webapp-linux

Распакуйте ZIP-файл в папку с именем docker-django-webapp-linux.

Затем откройте окно терминала в папке docker-django-webapp-linux .

(Необязательно) Анализ файл Docker

Это файл в примере, который называется Dockerfile. Он описывает образ Docker и содержит инструкции по настройке.

FROM tiangolo/uwsgi-nginx-flask:python3.6

RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt --no-cache-dir
ADD . /code/

# ssh
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
 && apt-get install -y --no-install-recommends openssh-server \
 && echo "$SSH_PASSWD" | chpasswd 

COPY sshd_config /etc/ssh/
COPY init.sh /usr/local/bin/

RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000 2222

#CMD ["python", "/code/manage.py", "runserver", "0.0.0.0:8000"]
ENTRYPOINT ["init.sh"]
  • Первая группа команд устанавливает в среде обязательные для приложения компоненты.
  • Вторая группа команд создает SSH-сервер для повышения безопасности между контейнером и узлом.
  • В последней строке файла (ENTRYPOINT ["init.sh"]) вызывается init.sh для запуска службы SSH и сервера Python.

Сборка и тестирование образа в локальной среде

Примечание.

Docker Hub имеет квоты на количество анонимных вытягивания на IP-адрес и количество прошедших проверку подлинности вытягивания на бесплатного пользователя. Если вы заметили, что вы извлекаете из Docker Hub ограничение, попробуйте docker login , если вы еще не вошли в систему.

  1. Запустите сборку образа с помощью следующей команды.

    docker build --tag appsvc-tutorial-custom-image .
    
  2. Убедитесь, что сборка работает, запустив контейнер Docker на локальном компьютере.

    docker run -it -p 8000:8000 appsvc-tutorial-custom-image
    

    Эта docker run команда указывает порт с аргументом -p и включает имя образа. -it позволяет остановить его с помощью CTRL+C.

    Совет

    Если вы работаете в Windows и видите ошибку standard_init_linux.go:211: процесс пользователя exec вызвал "нет такого файла или каталога", файл init.sh содержит конец строки CRLF вместо ожидаемых окончаний LF. Эта ошибка возникает, если вы использовали Git для клонирования примера репозитория, но опустили --config core.autocrlf=input параметр. В этом случае клонируйте репозиторий еще раз с аргументом --config . Вы также можете получить аналогичную ошибку, если редактировали файлinit.sh и сохранили его с использованием CR-LF для завершения. В этом случае сохраните его снова, используя LF.

  3. Перейдите к http://localhost:8000 проверке правильности работы веб-приложения и контейнера.

    Снимок экрана результатов тестирования.

I. Создание управляемого удостоверения, назначаемого пользователем

Служба приложений может использовать управляемое удостоверение по умолчанию или управляемое удостоверение, назначаемое пользователем, для проверки подлинности в реестре контейнеров. В этом руководстве вы будете использовать управляемое удостоверение, назначаемое пользователем.

  1. Выполните команду az group create, чтобы создать группу ресурсов.

    az group create --name msdocs-custom-container-tutorial --location westeurope
    

    Вы можете изменить значение --location, чтобы указать близкий к вам регион.

  2. Создайте управляемое удостоверение в группе ресурсов:

    az identity create --name myID --resource-group msdocs-custom-container-tutorial
    

II. Создание реестра контейнеров

  1. Создайте реестр контейнеров с помощью следующей az acr create команды. Замените <registry-name> уникальным именем для реестра. Имя должно содержать только буквы и цифры, и должно быть уникальным во всех службах Azure.

    az acr create --name <registry-name> --resource-group msdocs-custom-container-tutorial --sku Basic --admin-enabled true
    

    Параметр --admin-enabled позволяет отправлять образы в реестр с помощью учетных данных администратора.

  2. Получите учетные данные администратора, выполнив az credential acr show команду:

    az acr credential show --resource-group msdocs-custom-container-tutorial --name <registry-name>
    

    Выходные данные этой команды содержат два пароля и имя пользователя для реестра в формате JSON.

III. Отправка примера изображения в Реестр контейнеров Azure

В этом разделе вы отправляете изображение в Реестр контейнеров Azure, которое будет использоваться Служба приложений позже.

  1. В локальном терминале, где вы создали образ примера, используйте docker login команду для входа в реестр контейнеров:

    docker login <registry-name>.azurecr.io --username <registry-username>
    

    Замените <registry-name> и <registry-username> значениями из предыдущих шагов. При появлении запроса введите один из паролей из предыдущего раздела.

    Используйте одно и то же имя реестра во всех остальных шагах этого раздела.

  2. После успешного входа пометьте локальный образ Docker в реестр:

    docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  3. С помощью команды docker push отправьте образ в реестр.

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Первая отправка образа может занять несколько минут, так как она включает базовый образ. Все последующие отправки обычно выполняются быстрее.

    Пока вы ждете завершения, вы можете выполнить шаги, описанные в следующем разделе, то есть настроить развертывание из реестра в Службе приложений.

IV. Авторизация управляемого удостоверения для реестра

Созданное управляемое удостоверение еще не имеет авторизации для извлечения из реестра контейнеров. На этом шаге вы включите авторизацию.

  1. Получите идентификатор субъекта для управляемого удостоверения:

    principalId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query principalId --output tsv)
    
  2. Получите идентификатор ресурса для реестра контейнеров:

    registryId=$(az acr show --resource-group msdocs-custom-container-tutorial --name <registry-name> --query id --output tsv)
    
  3. Предоставьте управляемому удостоверению разрешение на доступ к реестру контейнеров.

    az role assignment create --assignee $principalId --scope $registryId --role "AcrPull"
    

    Дополнительные сведения об этих разрешениях см. в статье "Что такое управление доступом на основе ролей Azure?".

V. Создание веб-приложения

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

    az appservice plan create --name myAppServicePlan --resource-group msdocs-custom-container-tutorial --is-linux
    

    План Службы приложений соответствует виртуальной машине, в которой размещено веб-приложение. По умолчанию предыдущая команда использует недорогой ценовой категории B1, которая бесплатна в течение первого месяца. Уровень можно указать с помощью --sku параметра.

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

    az webapp create --resource-group msdocs-custom-container-tutorial --plan myAppServicePlan --name <app-name> --deployment-container-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Замените <app-name> именем веб-приложения. Имя должно быть уникальным в Azure. Также замените <registry-name> именем реестра из предыдущего раздела.

    Совет

    Вы можете в любой момент получить параметры контейнера для веб-приложения с помощью команды az webapp config container show --name <app-name> --resource-group msdocs-custom-container-tutorial. Этот образ задается в свойстве DOCKER_CUSTOM_IMAGE_NAME. Когда веб-приложение развертывается через шаблоны Azure DevOps или Azure Resource Manager, этот же образ может отображаться и в свойстве с именем LinuxFxVersion. Оба этих свойства имеют одинаковое назначение. Если они оба присутствуют в конфигурации веб-приложения, приоритет отдается LinuxFxVersion.

VI. Настройка веб-приложения

На этом шаге вы настроите веб-приложение следующим образом:

  • Настройте приложение для отправки запросов на порт 8000. Пример контейнера прослушивает порт 8000 для веб-запросов.
  • Сообщите приложению использовать управляемое удостоверение для извлечения образов из реестра контейнеров.
  • Настройте непрерывное развертывание из реестра контейнеров (каждый образ, отправленный в реестр, активирует приложение для извлечения нового образа). Эта часть не требуется для извлечения веб-приложения из реестра контейнеров, но она может сообщить веб-приложению, когда новый образ отправляется в реестр. Без этого необходимо вручную активировать извлечение образа, перезагрузив веб-приложение.
  1. Используйте az webapp config appsettings set, чтобы задать переменную среды WEBSITES_PORT, которую ожидает код приложения.

    az webapp config appsettings set --resource-group msdocs-custom-container-tutorial --name <app-name> --settings WEBSITES_PORT=8000
    

    Замените <app-name> значением, которое вы использовали на предыдущем шаге.

  2. Включите управляемое удостоверение, назначаемое пользователем, в веб-приложении с az webapp identity assign помощью команды:

    id=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query id --output tsv)
    az webapp identity assign --resource-group msdocs-custom-container-tutorial --name <app-name> --identities $id
    

    Замените <app-name> значением, которое вы использовали на предыдущем шаге.

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

    appConfig=$(az webapp config show --resource-group msdocs-custom-container-tutorial --name <app-name> --query id --output tsv)
    az resource update --ids $appConfig --set properties.acrUseManagedIdentityCreds=True
    

    Замените <app-name> значением, которое вы использовали на предыдущем шаге.

  4. Задайте идентификатор клиента, который использует веб-приложение для извлечения из Реестр контейнеров Azure. Этот шаг не нужен, если вы используете управляемое удостоверение, назначаемое системой.

    clientId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query clientId --output tsv)
    az resource update --ids $appConfig --set properties.AcrUserManagedIdentityID=$clientId
    
  5. Включите CI/CD в Службе приложений.

    cicdUrl=$(az webapp deployment container config --enable-cd true --name <app-name> --resource-group msdocs-custom-container-tutorial --query CI_CD_URL --output tsv)
    

    CI_CD_URL — это URL-адрес, который Служба приложений создает автоматически. Ваш реестр должен использовать этот URL-адрес, чтобы уведомлять Службу приложений о том, что произошла отправка образа. При этом веб-перехватчик не создается.

  6. Создайте веб-перехватчик в реестре контейнеров, используя значение CI_CD_URL, полученное на предыдущем шаге.

    az acr webhook create --name appserviceCD --registry <registry-name> --uri $cicdUrl --actions push --scope appsvc-tutorial-custom-image:latest
    
  7. Чтобы проверить, правильно ли настроен веб-перехватчик, проверьте связь с веб-перехватчиком и узнайте, получаете ли вы ответ "200 ОК".

    eventId=$(az acr webhook ping --name appserviceCD --registry <registry-name> --query id --output tsv)
    az acr webhook list-events --name appserviceCD --registry <registry-name> --query "[?id=='$eventId'].eventResponseMessage"
    

    Совет

    Чтобы просмотреть все сведения обо всех событиях веб-перехватчика, удалите параметр --query.

    Если вы выполняете потоковую передачу журнала контейнеров, вы увидите Starting container for site сообщение после проверки связи с веб-перехватчиком, так как веб-перехватчик активирует приложение для перезапуска.

VII. Переход к веб-приложению

Чтобы протестировать приложение, перейдите на страницу https://<app-name>.azurewebsites.net. Замените <app-name> именем своего веб-приложения.

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

Снимок экрана: веб-приложение, работающее в браузере.

VIII. Доступ к журналам диагностики

Пока вы ожидаете получения образа Службой приложений, будет полезно точно видеть, что делает Служба приложений, организовав потоковую передачу журналов контейнера на ваш терминал.

  1. Включите ведение журнала для контейнера.

    az webapp log config --name <app-name> --resource-group msdocs-custom-container-tutorial --docker-container-logging filesystem
    
  2. Включите потоковую передачу журналов.

    az webapp log tail --name <app-name> --resource-group msdocs-custom-container-tutorial
    

    Если журналы консоли не отображаются, проверьте еще раз через 30 секунд.

    Вы также можете проверить файлы журнала в браузере на странице https://<app-name>.scm.azurewebsites.net/api/logs/docker.

  3. Чтобы остановить потоковую передачу журналов в любое время, нажмите клавиши CTRL+C.

IX. Изменение кода и повторное развертывание приложения

В этом разделе вы внесете изменения в код веб-приложения, перестроите образ и отправите его в реестр контейнеров. Затем Служба приложений автоматически извлечет обновленный образ из реестра и обновит работающее веб-приложение.

  1. В локальной папке docker-django-webapp-linux откройте файл app/templates/app/index.html.

  2. Измените первый элемент HTML в соответствии со следующим кодом.

    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="#">Azure App Service - Updated Here!</a>
        </div>
      </div>
    </nav>
    
  3. Сохранение изменений.

  4. Перейдите в папку docker-django-webapp-linux и перестройте образ.

    docker build --tag appsvc-tutorial-custom-image .
    
  5. Обновите тег latestизображения следующим образом:

    docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Замените <registry-name> именем своего реестра.

  6. Отправьте образ в реестр:

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  7. По завершении отправки образа веб-перехватчик уведомляет Служба приложений о отправке и Служба приложений пытается извлечь обновленный образ. Подождите несколько минут и проверьте, развернуто ли обновление, перейдя по адресу https://<app-name>.azurewebsites.net.

.X Подключение контейнера с помощью SSH.

SSH обеспечивает улучшенную связь между контейнером и клиентом. Чтобы включить подключение SSH к контейнеру, необходимо настроить для него пользовательский образ. После запуска контейнера можно открыть SSH-подключение.

Настройка SSH для контейнера

Пример приложения, используемого в этом руководстве, уже имеет необходимую конфигурацию в Dockerfile, которая устанавливает сервер SSH, а также задает учетные данные входа. Этот раздел не содержит практических действий. Чтобы подключиться к контейнеру, перейдите к следующему разделу.

ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
  && apt-get install -y --no-install-recommends openssh-server \
  && echo "$SSH_PASSWD" | chpasswd 

Примечание.

Эта конфигурация не допускает внешние подключения к контейнеру. SSH доступен только на сайте Kudu и на сайте SCM. Сайты Kudu и SCM выполняют аутентификацию с вашей учетной записью Azure. root:Docker! Не следует изменять при использовании SSH. SCM/KUDU будет использовать учетные данные портал Azure. Изменение этого значения приведет к ошибке при использовании SSH.

Также этот Dockerfile копирует файл sshd_config в папку /etc/ssh/ и предоставляет порт 2222 в контейнере.

COPY sshd_config /etc/ssh/

# ...

EXPOSE 8000 2222

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

Наконец, начальный сценарий init.sh запускает SSH-сервер.

#!/bin/bash
service ssh start

Открытие подключения SSH к контейнеру

  1. Чтобы установить подключение, перейдите по адресу https://<app-name>.scm.azurewebsites.net/webssh/host и войдите с учетной записью Azure. Замените <app-name> именем своего веб-приложения.

  2. После входа вы будете перенаправлены на информационную страницу веб-приложения. Выберите SSH в верхней части страницы, чтобы открыть оболочку и выполнить команды.

    Например, можно проверить процессы, выполняемые в приложении, с помощью top команды.

XI. Очистка ресурсов

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

az group delete --name msdocs-custom-container-tutorial

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

Вы научились выполнять следующие задачи:

  • Разверните пользовательский образ в частном реестре контейнеров.
  • Развертывание и пользовательский образ в Служба приложений.
  • Обновите и повторно разверните образ.
  • Доступ к журналам диагностики.
  • Подключитесь к контейнеру с помощью SSH.
  • Отправьте пользовательский образ Docker в Реестр контейнеров Azure.
  • Разверните пользовательский образ в Служба приложений.
  • Настройте переменные среды.
  • Извлеките изображение в Служба приложений с помощью управляемого удостоверения.
  • Доступ к журналам диагностики.
  • Включите CI/CD из Реестр контейнеров Azure в Служба приложений.
  • Подключитесь к контейнеру с помощью SSH.

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

Также ознакомьтесь с другими ресурсами: