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


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

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

В этом руководстве вы узнаете, как:

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

Подсказка

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

Предпосылки

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

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

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

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

dotnet new worker --name <Project.Name>

Для получения дополнительной информации о команде создания нового проекта рабочей службы в .NET CLI, см. dotnet new worker.

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

dotnet new worker --name <Project.Name>

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

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

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

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

dotnet build

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

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

dotnet build <path/to/project.csproj>

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

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

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

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

Параметры файла Docker

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

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

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

FROM mcr.microsoft.com/dotnet/runtime:8.0@sha256:e6b552fd7a0302e4db30661b16537f7efcdc0b67790a47dbf67a5e798582d3a5 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@sha256:35792ea4ad1db051981f62b313f1be3b46b1f45cadbaa3c288cd0d3056eefb83 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 Hub: среда выполнения .NET и Docker Hub: пакет SDK для .NET.

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

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

Это важно

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

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

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

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

Щелкните правой кнопкой мыши файл Dockerfile в обозревателе и выберите "Создать образ". При появлении запроса «Пометить изображение как» введите appcloudservice:latest. Отображается выходной терминал задачи Docker , сообщающий о ходе выполнения команды сборки Docker.

Замечание

Если вам не будет предложено пометить изображение, возможно, что Visual Studio Code использует существующий tasks.json. Если используемый тег нежелателен, его можно изменить, обновив значение элемента dockerBuild/tag конфигурации в массиве 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, например Basic.
  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>: принятые значения, базовые, классические, премиум или стандартные.

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

  • Создает реестр контейнеров Azure с именем реестра в указанной группе ресурсов.
  • Администраторский пользователь активирован — это требуется для экземпляров контейнеров Azure.

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

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

С помощью образа .NET Docker и созданного ресурса реестра контейнеров теперь можно отправить образ в реестр контейнеров.

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

Visual Studio: диалоговое окно публикации — выберите Azure

Для конкретного целевого объекта выберите реестр контейнеров Azure , а затем нажмите кнопку "Далее".

Visual Studio: диалоговое окно публикации — выбор реестра контейнеров

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

Visual Studio: диалоговое окно публикации — выбор сведений о реестре контейнеров

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

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

Visual Studio Code: Docker — отправка образа

Интегрированное окно терминала сообщает о ходе выполнения команды 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 на панели действий. Разверните узел REGISTRYIES и выберите "Подключить реестр". Выберите Azure при появлении запроса и войдите при необходимости.

Это важно

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

Visual Studio Code — Docker: подключение реестра

Разверните узел РЕЕСТРЫ, выберите Azure, > вашу подписку, > реестр контейнеров и образ, а затем щелкните правой кнопкой мыши по тегу. Выберите Развернуть образ в Azure Container Instances.

Visual Studio Code — Docker: развертывание образа в 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: запуск экземпляра контейнера

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

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

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

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

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

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

См. также