Развертывание службы рабочей роли в Azure

В этой статье содержатся сведения о том, как развернуть службу рабочей роли .NET в Azure. Если рабочая роль выполняется как Экземпляр контейнера Azure (ACI) из Реестра контейнеров Azure (ACR), в облаке она может выполнять функцию микрослужбы. Существует множество вариантов использования длительно работающих служб, и именно по этой причине существует служба рабочей роли.

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

  • Создание службы рабочей роли.
  • Создание ресурса реестра контейнеров.
  • Передача образа в реестр контейнеров.
  • Развертывание в качестве экземпляра контейнера.
  • Проверка функционирования службы рабочей роли.

Совет

Весь пример исходного кода "Рабочие роли в .NET" доступен для скачивания в Обозревателе примеров. Дополнительные сведения см. в разделе Обзор примеров кода: рабочие роли в .NET.

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

Создание нового проекта

Чтобы создать новый проект службы рабочей роли в Visual Studio, выберите Файл>Создать>Проект. В диалоговом окне Создание нового проекта выполните поиск по запросу "служба рабочей роли" и выберите шаблон "Служба рабочей роли". Введите имя проекта, выберите расположение и щелкните Далее. На странице Дополнительные сведения для параметра Целевая платформа выберите .NET 5.0 и установите флажок Включить Docker, чтобы включить поддержку Docker. Выберите нужную версию Docker.

Чтобы создать новый проект службы рабочей роли с помощью Visual Studio Code, можно выполнить команды .NET CLI из интегрированного терминала. Дополнительные сведения см. в статье Visual Studio Code: интегрированный терминал.

Откройте интегрированный терминал и выполните команду dotnet new, заменив <Project.Name> именем проекта.

dotnet new worker --name <Project.Name>

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

Чтобы создать новый проект службы рабочей роли с помощью .NET CLI, откройте используемый вами терминал в рабочем каталоге. Выполните команду dotnet new и замените <Project.Name> именем проекта.

dotnet new worker --name <Project.Name>

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

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

Чтобы выполнить сборку приложения в Visual Studio, нажмите клавишу F6 или выберите в меню Сборка>Собрать решение.

Чтобы выполнить сборку приложения в Visual Studio Code, откройте окно встроенного терминала и выполните команду dotnet build из рабочей папки.

dotnet build

Дополнительные сведения о командах сборки .NET CLI см. здесь: dotnet build.

Чтобы выполнить сборку приложения из .NET CLI, выполните команду dotnet build из рабочей папки.

dotnet build <path/to/project.csproj>

Укажите значение <path/to/project.csproj>, которое является путем к файлу проекта для сборки. Дополнительные сведения о командах сборки .NET CLI см. здесь: dotnet build.

Добавление поддержки Docker

Если вы правильно установили флажок Включить Docker при создании нового рабочего проекта, перейдите к шагу Создание образа Docker.

Если вы еще не установили этот флажок, это можно сделать прямо сейчас. В Visual Studio щелкните узел проекта правой кнопкой мыши в Обозревателе решений и выберите пункт Добавить>Поддержка Docker. Вам будет предложено выбрать целевую ОС; нажмите кнопку "ОК" с выбранным по умолчанию выбором ОС.

Docker File Options

В Visual Studio Code необходимо установить расширение Docker и расширение учетной записи Azure. Откройте палитру команд и выберите вариант Docker: Add Docker files to workspace (Docker: добавление файлов Docker в рабочую область). Если появится запросВыбор платформы приложения, выберите вариант .NET: основная консоль. При появлении запроса Выбор проекта выберите созданный вами проект службы рабочей роли. При появлении запроса Выберите операционную систему выберите первую из перечисленных ОС. При появлении запроса на добавление необязательных файлов Docker Compose выберите Нет.

Для поддержки Docker требуется Dockerfile. Этот файл представляет собой набор комплексных инструкций, необходимых для создания службы рабочей роли .NET в виде образа Docker. Файл Dockerfileне имеет расширения. Следующий код является примером Dockerfile и должен существовать в корневом каталоге файла проекта.

При использовании интерфейса командной строки Dockerfileне создается автоматически. Скопируйте его содержимое в новый файл с именем Dockerfile в корневом каталоге проекта.

FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
WORKDIR /app

# Creates a non-root user with an explicit UID and adds permission to access the /app folder
# For more info, please refer to https://aka.ms/vscode-docker-dotnet-configure-containers
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["App.CloudService.csproj", "./"]
RUN dotnet restore "App.CloudService.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "App.CloudService.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "App.CloudService.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "App.CloudService.dll"]

Примечание.

В файле Dockerfile нужно изменить все строки, где упоминается *App.CloudService, заменив эту подстроку именем своего проекта.

Дополнительные сведения о официальных образах .NET см. в разделах Центр Docker: среда выполнения .NET и Центр Docker: пакет SDK для .NET.

Создание образа Docker

Чтобы создать образ Docker, необходимо запустить подсистему Docker.

Важно!

При использовании Docker Desktop и Visual Studio, чтобы избежать ошибок, связанных с общим доступом к томам, убедитесь, что она включена.

  1. На экране Settings (Параметры) в Docker Desktop выберите Shared Drives (Общие диски).
  2. Выберите диски, которые содержат файлы проекта.

Дополнительные сведения см. в статье Устранение неполадок при разработке с Docker в Visual Studio.

Щелкните правой кнопкой мыши Dockerfile в Обозревателе решений, а затем выберите пункт Собрать образ Docker. Отобразится окно Вывод, в котором будут содержатся сведения о ходе выполнения команды docker build.

Щелкните правой кнопкой мыши Dockerfile в обозревателе, а затем выберите пункт Build Image (Собрать образ). При появлении запроса на Tag image as (Добавление к изображению метки как) введите appcloudservice:latest. Отобразится терминал выходных данных задачи Docker, в котором будут содержатся сведения о ходе выполнения команды Docker build.

Примечание.

Если запрос на добавление к изображению метки не появляется, возможно, Visual Studio Code использует для принятия решения существующий файл tasks.json. Если используемый тег нежелателен, его можно заменить, изменив значение dockerBuild/tag элемента конфигурации docker-build в массиве tasks. Рассмотрим следующий пример раздела конфигурации:

{
  "type": "docker-build",
  "label": "docker-build: release",
  "dependsOn": [
    "build"
  ],
  "dockerBuild": {
    "tag": "appcloudservice:latest",
    "dockerfile": "${workspaceFolder}/cloud-service/Dockerfile",
    "context": "${workspaceFolder}",
    "pull": true
  },
  "netCore": {
    "appProject": "${workspaceFolder}/cloud-service/App.CloudService.csproj"
  }
}

Откройте окно терминала в корневом каталоге файла Dockerfile и выполните следующую команду docker:

docker build -t appcloudservice:latest -f Dockerfile .

При выполнении команда docker build обрабатывает каждую строку в файле Dockerfile как шаг инструкции. Эта команда создает образ и локальный репозиторий с именем appcloudservice, который указывает на такой образ.

Совет

Созданный Dockerfile будет отличатся в разных средах разработки. Например, при добавлении поддержки Docker из Visual Studio могут возникнуть проблемы при попытке создать образ Docker из Visual Studio Code, так как шаги Dockerfile зависят. Рекомендуется выбрать одну среду разработки и использовать ее в рамках этого руководства.

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

Реестр контейнеров Azure (ACR) позволяет создавать, хранить, а также администрировать образы и артефакты контейнеров в частном реестре. Чтобы создать реестр контейнеров, необходимо создать новый ресурс в портал Azure.

  1. Выберите подписку и соответствующую группу ресурсов (или создайте ее).
  2. Введите имя реестра.
  3. Выберите расположение.
  4. Выберите соответствующий SKU, например уровня Базовый.
  5. Выберите Review + create (Просмотреть и создать).
  6. После отображения текста Проверка пройдена выберите пункт Создать.

Важно!

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

Реестр контейнеров Azure (ACR) позволяет создавать, хранить, а также администрировать образы и артефакты контейнеров в частном реестре. Откройте окно терминала в корневом каталоге файла Dockerfile и выполните следующую команду Azure CLI:

Важно!

Чтобы иметь возможность взаимодействовать с ресурсами Azure из Azure CLI, необходимо пройти проверку подлинности для сеанса терминала. Чтобы выполнить проверку подлинности, выполните команду az login:

az login

Войдя в систему, выполните команду az account set, чтобы указать подписку, если у вас есть несколько подписок и вы не задали подписку по умолчанию.

az account set --subscription <subscription name or id>

После входа в Azure CLI этот сеанс сможет правильно взаимодействовать с ресурсами.

Если у вас еще нет группы ресурсов, с которой вы хотите связать свою рабочую службу, создайте ее с помощью az group create команды:

az group create -n <resource group> -l <location>

Укажите имя <resource group> и <location>. Чтобы создать реестр контейнеров, вызовите az acr create команду.

az acr create -n <registry name> -g <resource group> --sku <sku> --admin-enabled true

Замените заполнители реальными значениями:

  • <registry name>: имя раздела реестра;
  • <resource group>: используемое имя группы ресурсов.
  • <sku>: одно из допустимых значений Basic, Classic, Premium или Standard.

Предыдущая команда:

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

Дополнительные сведения см. в статье Краткое руководство. Создание реестра контейнеров Azure.

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

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

Щелкните правой кнопкой мыши проект в Обозревателе решений и выберите пункт Публикация. Откроется диалоговое окно Публикация. Выберите для параметра Целевой объект значение Azure, а затем нажмите кнопку Далее.

Visual Studio: Publish dialog - select Azure

Задайте для параметра Указанный целевой объект значение Реестр контейнеров Azure, а затем нажмите кнопку Далее.

Visual Studio: Publish dialog - select container registry

Затем в области Реестр контейнеров выберите значение Имя подписки, которую вы использовали для создания ресурса ACR. В области выбора Реестры контейнеров выберите созданный реестр контейнеров и нажмите кнопку Готово.

Visual Studio: Publish dialog - select container registry details

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

Выберите Docker на панели действий Visual Studio Code. Разверните панель представления в виде дерева IMAGES, а затем — узел образа appcloudservice и щелкните правой кнопкой мыши метку latest.

Visual Studio Code: Docker - push image

Интегрированное окно терминала сообщает о ходе выполнения docker push команды в реестр контейнеров.

Чтобы отправить образ в реестр контейнеров, сначала нужно войти в этот реестр:

az acr login -n <registry name>

Команда az acr login входит в реестр контейнеров с помощью Интерфейса командной строки Docker. Чтобы отправить образ в реестр контейнеров, используйте команду az acr build, указав имя реестра контейнеров в качестве <registry name>:

az acr build -r <registry name> -t appcloudservice .

Предыдущая команда:

  • Упаковывает источник в TAR-файл.
  • Отправляет его в реестр контейнеров.
  • Затем реестр контейнеров распаковывает TAR-файл.
  • Выполняет команду docker build в ресурсе реестра контейнеров для Dockerfile.
  • Добавляет образ в реестр контейнеров.

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

Развертывание в качестве экземпляра контейнера

В Visual Studio Code выберите Docker на панели действий. Разверните узел REGISTRIES, а затем выберите пункт Connect Registry (Подключить реестр). При появлении запроса выберите Azure и при необходимости выполните вход.

Важно!

Развертывание в качестве экземпляра контейнера из Visual Studio Code больше не работает на Mac. Дополнительные сведения см. в разделе GitHub: о расширении Docker для Visual Studio Code.

Visual Studio Code - Docker: Connect registry

Разверните узел REGISTRYIES, выберите Azure, подписку > реестра > контейнеров на образ, а затем щелкните правой кнопкой мыши тег. Выберите Deploy Image to Azure Container Instances (Развернуть образ в службе "Экземпляры контейнеров Azure").

Visual Studio Code - Docker: Deploy image to Azure Container Instances

Чтобы создать экземпляр контейнера, сначала создайте группу контейнеров с помощью az container create команды.

az container create -g <resource group> \
  --name <instance name> \
  --image <registry name>.azurecr.io/<image name>:latest \
  --registry-password <password>

Укажите соответствующие значения.

  • <resource group>: имя группы ресурсов, которую вы использовали в этом учебнике;
  • <instance name>: имя экземпляра контейнера;
  • <registry name>: имя реестра контейнеров;
  • <image name>: имя образа;
  • <password>: пароль для реестра контейнеров— вы можете получить это из портал Azure ключей доступа к ресурсам >реестра контейнеров.

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

  1. Выберите ту же подпискуи соответствующую группу ресурсов, указанные в предыдущем разделе.
  2. Введите имя контейнера.appcloudservice-container
  3. Выберите регион, который соответствует выбранному ранее расположению.
  4. Задайте для параметра Источник образа значение Реестр контейнеров Azure.
  5. Выберите реестр по имени, указанному на предыдущем шаге.
  6. Выберите образ и метку образа.
  7. Выберите Review + create (Просмотреть и создать).
  8. После отображения текста Проверка пройдена выберите пункт Создать.

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

Дополнительные сведения см. в статье Краткое руководство. Создание экземпляра контейнера Azure.

Проверка функциональности службы

Экземпляр контейнера начинает работать сразу же после создания.

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

Azure portal: Container instance running

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

Чтобы убедиться, что служба рабочей роли работает правильно, можно просмотреть журналы выполняемого приложения. Используйте команду az container logs:

az container logs -g <resource group> --name <instance name>

Укажите соответствующие значения.

  • <resource group>: имя группы ресурсов, которую вы использовали в этом учебнике;
  • <instance name>: имя экземпляра контейнера;

Вы увидите журналы выходных данных службы рабочей роли .NET. Это означает, что контейнерное приложение успешно развернуто в ACI.

См. также