Перенос пользовательского программного обеспечения в Службу приложений Azure с помощью пользовательского контейнера
служба приложение Azure предоставляет предварительно определенные стеки приложений, например ASP.NET или Node.js в Windows. Эти стеки приложений выполняются в службах IIS. Предварительно настроенная среда Windows блокирует в операционной системе следующее:
- Административный доступ.
- установки программного обеспечения;
- изменения в глобальном кэше сборок.
Дополнительные сведения см. в статье Функциональные возможности операционной системы для службы приложений Azure.
Вы можете развернуть специально настроенный образ Windows из Visual Studio, чтобы внести в ОС изменения, необходимые для вашего приложения. Это упрощает перенос локального приложения, требующего настраиваемой ос и конфигурации программного обеспечения. В этом руководстве показано, как перенести в службу приложений приложение ASP.NET, которое использует пользовательские шрифты, установленные в библиотеке шрифтов Windows. Вы развертываете настраиваемый образ Windows из Visual Studio в Реестр контейнеров Azure, а затем запускаете его в Служба приложений.
Необходимые компоненты
Для работы с этим руководством:
- Зарегистрируйтесь для учетной записи Docker Hub.
- Установите Docker для ОС Windows.
- Настройте Docker для запуска контейнеров Windows.
- Установите Visual Studio 2022, а также следующие рабочие нагрузки: ASP.NET и веб-разработка и разработка Azure. Если вы уже установили Visual Studio 2022:
- Установите последние обновления для Visual Studio, выбрав Справка>Проверить обновления.
- Добавьте рабочие нагрузки в Visual Studio, выбрав Инструменты>Получить средства и компоненты.
Настройка приложения в локальной среде
Скачивание примера приложения
На этом шаге вы настроите локальный проект .NET.
- Скачайте пример проекта.
- Извлеките (распакуйте) содержимое файла custom-font-win-container-master.zip.
Пример проекта содержит простое приложение 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 (Поддержка оркестрации контейнеров).
Выберите 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. Если вы уже вошли в систему, выберите учетную запись, содержащую необходимую подписку, в раскрывающемся меню.
Настройка реестра
Настройте новый реестр контейнеров с помощью предлагаемых значений в следующей таблице в качестве руководства. По завершении выберите Создать.
Параметр | Предлагаемое значение |
---|---|
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 создаст необходимые ресурсы.
Переход к веб-приложению
По завершении развертывания отобразится окно уведомлений.
Выберите Перейти к ресурсу.
На странице приложения щелкните ссылку в разделе 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, последняя версия уже установлена.
- Подготовьте учетную запись Azure с активной подпиской. Создайте учетную запись бесплатно .
Используйте среду 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
, если вы еще не вошли в систему.
Запустите сборку образа с помощью следующей команды.
docker build --tag appsvc-tutorial-custom-image .
Убедитесь, что сборка работает, запустив контейнер 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.Перейдите к
http://localhost:8000
проверке правильности работы веб-приложения и контейнера.
I. Создание управляемого удостоверения, назначаемого пользователем
Служба приложений может использовать управляемое удостоверение по умолчанию или управляемое удостоверение, назначаемое пользователем, для проверки подлинности в реестре контейнеров. В этом руководстве вы будете использовать управляемое удостоверение, назначаемое пользователем.
Выполните команду az group create, чтобы создать группу ресурсов.
az group create --name msdocs-custom-container-tutorial --location westeurope
Вы можете изменить значение
--location
, чтобы указать близкий к вам регион.Создайте управляемое удостоверение в группе ресурсов:
az identity create --name myID --resource-group msdocs-custom-container-tutorial
II. Создание реестра контейнеров
Создайте реестр контейнеров с помощью следующей
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
позволяет отправлять образы в реестр с помощью учетных данных администратора.Получите учетные данные администратора, выполнив
az credential acr show
команду:az acr credential show --resource-group msdocs-custom-container-tutorial --name <registry-name>
Выходные данные этой команды содержат два пароля и имя пользователя для реестра в формате JSON.
III. Отправка примера изображения в Реестр контейнеров Azure
В этом разделе вы отправляете изображение в Реестр контейнеров Azure, которое будет использоваться Служба приложений позже.
В локальном терминале, где вы создали образ примера, используйте
docker login
команду для входа в реестр контейнеров:docker login <registry-name>.azurecr.io --username <registry-username>
Замените
<registry-name>
и<registry-username>
значениями из предыдущих шагов. При появлении запроса введите один из паролей из предыдущего раздела.Используйте одно и то же имя реестра во всех остальных шагах этого раздела.
После успешного входа пометьте локальный образ Docker в реестр:
docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
С помощью команды
docker push
отправьте образ в реестр.docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
Первая отправка образа может занять несколько минут, так как она включает базовый образ. Все последующие отправки обычно выполняются быстрее.
Пока вы ждете завершения, вы можете выполнить шаги, описанные в следующем разделе, то есть настроить развертывание из реестра в Службе приложений.
IV. Авторизация управляемого удостоверения для реестра
Созданное управляемое удостоверение еще не имеет авторизации для извлечения из реестра контейнеров. На этом шаге вы включите авторизацию.
Получите идентификатор субъекта для управляемого удостоверения:
principalId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query principalId --output tsv)
Получите идентификатор ресурса для реестра контейнеров:
registryId=$(az acr show --resource-group msdocs-custom-container-tutorial --name <registry-name> --query id --output tsv)
Предоставьте управляемому удостоверению разрешение на доступ к реестру контейнеров.
az role assignment create --assignee $principalId --scope $registryId --role "AcrPull"
Дополнительные сведения об этих разрешениях см. в статье "Что такое управление доступом на основе ролей Azure?".
V. Создание веб-приложения
Создайте план Службы приложений с помощью команды
az appservice plan create
.az appservice plan create --name myAppServicePlan --resource-group msdocs-custom-container-tutorial --is-linux
План Службы приложений соответствует виртуальной машине, в которой размещено веб-приложение. По умолчанию предыдущая команда использует недорогой ценовой категории B1, которая бесплатна в течение первого месяца. Уровень можно указать с помощью
--sku
параметра.Создайте веб-приложение с помощью команды
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 для веб-запросов.
- Сообщите приложению использовать управляемое удостоверение для извлечения образов из реестра контейнеров.
- Настройте непрерывное развертывание из реестра контейнеров (каждый образ, отправленный в реестр, активирует приложение для извлечения нового образа). Эта часть не требуется для извлечения веб-приложения из реестра контейнеров, но она может сообщить веб-приложению, когда новый образ отправляется в реестр. Без этого необходимо вручную активировать извлечение образа, перезагрузив веб-приложение.
Используйте
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>
значением, которое вы использовали на предыдущем шаге.Включите управляемое удостоверение, назначаемое пользователем, в веб-приложении с
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>
значением, которое вы использовали на предыдущем шаге.Настройте приложение для извлечения из Реестр контейнеров 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>
значением, которое вы использовали на предыдущем шаге.Задайте идентификатор клиента, который использует веб-приложение для извлечения из Реестр контейнеров 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
Включите 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-адрес, чтобы уведомлять Службу приложений о том, что произошла отправка образа. При этом веб-перехватчик не создается.Создайте веб-перехватчик в реестре контейнеров, используя значение CI_CD_URL, полученное на предыдущем шаге.
az acr webhook create --name appserviceCD --registry <registry-name> --uri $cicdUrl --actions push --scope appsvc-tutorial-custom-image:latest
Чтобы проверить, правильно ли настроен веб-перехватчик, проверьте связь с веб-перехватчиком и узнайте, получаете ли вы ответ "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. Доступ к журналам диагностики
Пока вы ожидаете получения образа Службой приложений, будет полезно точно видеть, что делает Служба приложений, организовав потоковую передачу журналов контейнера на ваш терминал.
Включите ведение журнала для контейнера.
az webapp log config --name <app-name> --resource-group msdocs-custom-container-tutorial --docker-container-logging filesystem
Включите потоковую передачу журналов.
az webapp log tail --name <app-name> --resource-group msdocs-custom-container-tutorial
Если журналы консоли не отображаются, проверьте еще раз через 30 секунд.
Вы также можете проверить файлы журнала в браузере на странице
https://<app-name>.scm.azurewebsites.net/api/logs/docker
.Чтобы остановить потоковую передачу журналов в любое время, нажмите клавиши CTRL+C.
IX. Изменение кода и повторное развертывание приложения
В этом разделе вы внесете изменения в код веб-приложения, перестроите образ и отправите его в реестр контейнеров. Затем Служба приложений автоматически извлечет обновленный образ из реестра и обновит работающее веб-приложение.
В локальной папке docker-django-webapp-linux откройте файл app/templates/app/index.html.
Измените первый элемент 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>
Сохранение изменений.
Перейдите в папку docker-django-webapp-linux и перестройте образ.
docker build --tag appsvc-tutorial-custom-image .
Обновите тег
latest
изображения следующим образом:docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
Замените
<registry-name>
именем своего реестра.Отправьте образ в реестр:
docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
По завершении отправки образа веб-перехватчик уведомляет Служба приложений о отправке и Служба приложений пытается извлечь обновленный образ. Подождите несколько минут и проверьте, развернуто ли обновление, перейдя по адресу
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 к контейнеру
Чтобы установить подключение, перейдите по адресу
https://<app-name>.scm.azurewebsites.net/webssh/host
и войдите с учетной записью Azure. Замените<app-name>
именем своего веб-приложения.После входа вы будете перенаправлены на информационную страницу веб-приложения. Выберите SSH в верхней части страницы, чтобы открыть оболочку и выполнить команды.
Например, можно проверить процессы, выполняемые в приложении, с помощью
top
команды.
XI. Очистка ресурсов
За использование ресурсов, созданных во время изучения этой статьи, может взиматься плата. Чтобы очистить ресурсы, достаточно просто удалить группу ресурсов, которая их содержит.
az group delete --name msdocs-custom-container-tutorial
Следующие шаги
Вы научились выполнять следующие задачи:
- Разверните пользовательский образ в частном реестре контейнеров.
- Развертывание и пользовательский образ в Служба приложений.
- Обновите и повторно разверните образ.
- Доступ к журналам диагностики.
- Подключитесь к контейнеру с помощью SSH.
- Отправьте пользовательский образ Docker в Реестр контейнеров Azure.
- Разверните пользовательский образ в Служба приложений.
- Настройте переменные среды.
- Извлеките изображение в Служба приложений с помощью управляемого удостоверения.
- Доступ к журналам диагностики.
- Включите CI/CD из Реестр контейнеров Azure в Служба приложений.
- Подключитесь к контейнеру с помощью SSH.
В следующем руководстве вы узнаете, как обеспечить безопасность приложения с помощью личного домена и сертификата.
Также ознакомьтесь с другими ресурсами: