Поделиться через


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

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

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

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

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

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

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

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

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

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

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

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

В проводнике Windows перейдите к custom-font-win-container-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 можно хранить образы для развертывания контейнеров. Службу приложений можно настроить для использования образов, размещенных в реестре контейнеров.

Открытие окна публикации

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

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

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

  1. В окне публикации выберите Azure и нажмите кнопку "Далее".

  2. Выберите реестр контейнеров Azure и нажмите кнопку "Далее".

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

Снимок экрана: окно публикации. Выделена кнопка

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

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

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

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

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

Снимок экрана: окно реестра контейнеров Azure.

Нажмите Готово.

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

Вход в Azure

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

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

Выберите "Создать ресурс" и выберите "Создать " в разделе "Веб-приложение".

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

На вкладке "Основы " настройте параметры с помощью следующей таблицы в качестве руководства.

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

Вкладка "Основные сведения" должна выглядеть примерно так:

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

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

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

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

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

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

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

По завершении развертывания появится сообщение уведомления:

Снимок экрана: сообщение уведомления.

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

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

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

Screentshot, показывающий новую страницу браузера для веб-приложения.

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

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

Поздравляем! Вы переносили приложение ASP.NET в службу приложений в контейнере 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 из реестра контейнеров в службу приложений.
  • Подключитесь к контейнеру с помощью SSH.

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

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

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

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

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

docker --version

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

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

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

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

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

Скачивание ZIP-файла из GitHub

Вместо клонирования Git можно перейти к https://github.com/Azure-Samples/docker-django-webapp-linux файлу и выбрать 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 вызвал "нет такого файла или каталога", файл init.sh содержит окончания строки CRLF вместо ожидаемых окончаний LF. Эта ошибка возникает, если вы использовали Git для клонирования примера репозитория, но опустили --config core.autocrlf=input параметр. В этом случае клонируйте репозиторий еще раз с аргументом --config . Вы также можете получить аналогичную ошибку, если редактировали файлinit.sh и сохранили его с использованием CR-LF для завершения. В этом случае сохраните его снова, используя LF.

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

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

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

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

  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
    

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

  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.

Отправка примера образа в реестр контейнеров

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

  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
    

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

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

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

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

  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?".

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

  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.

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

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

  • Настройте приложение для отправки запросов на порт 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. Настройте приложение для извлечения из реестра контейнеров с помощью управляемых удостоверений.

    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. Задайте идентификатор клиента, который использует веб-приложение для извлечения из реестра контейнеров. Этот шаг не требуется, если вы используете управляемое удостоверение, назначаемое системой.

    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 сообщение после проверки связи с веб-перехватчиком, так как веб-перехватчик активирует приложение для перезапуска.

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

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

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

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

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

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

  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.

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

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

  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

Подключение к контейнеру с помощью 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 команды.

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

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

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

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

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

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

Перейдите к следующему руководству:

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