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

Служба приложений Azure предоставляет предопределенные стеки приложений на платформе Windows, например ASP.NET или Node.js, выполняющиеся в 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 (Поддержка оркестрации контейнеров).

Снимок экрана: окно "Поддержка оркестратора контейнеров"." data-linktype="relative-path">

Выберите 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 в обозревателе решений и выберите Опубликовать.

Снимок экрана: окно

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

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

Снимок экрана: мастер публикации, в котором выделены такие элементы:

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

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

войдите в Azure.

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

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

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

Настройка Реестра контейнеров Azure.

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

Вход в Azure

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

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

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

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

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

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

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

Показана вкладка

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

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

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

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

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

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

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

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

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

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

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

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

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

Показана домашняя страница со шрифтом, который вы настроили.

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

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

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

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-x64, 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 вы можете открыть страницу https://github.com/Azure-Samples/docker-django-webapp-linux, а затем выбрать действие Clone (Клонировать) и Download ZIP (Скачать ZIP-файл).

Распакуйте 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 user process caused "no such file or directory", значит в файле init.sh для завершения строк используется CR-LF, а не ожидаемый вариант 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 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"
    

    Дополнительные сведения об этих разрешениях см. в статье Общие сведения об управлении доступом на основе ролей (RBAC) для ресурсов 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> значением, которое вы использовали на предыдущем шаге.

    Дополнительные сведения об этой переменной среды см. в файле сведений в репозитории этого примера на сайте GitHub.

  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 OK.

    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> именем веб-приложения.

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

Снимок экрана: браузер, показывающий успешное выполнение веб-приложения в Azure.

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. Обновите тег образа до последней версии:

    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.

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

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