Implantar um serviço de trabalho no Azure

Neste artigo, você aprenderá a implantar um Serviço de Trabalho do .NET no Azure. Com o Trabalho em execução como uma ACI (Instância de Contêiner do Azure) do ACR (Registro de Contêiner do Azure) ele pode atuar como um microsserviço na nuvem. Há muitos casos de uso para serviços de longa execução e o Serviço de Trabalho existe por esse motivo.

Neste tutorial, você aprenderá a:

  • Criar um serviço de trabalho.
  • Criar recurso do registro do contêiner.
  • Enviar imagem por push para o registro de contêiner.
  • Implantar como instância de contêiner.
  • Verificar a funcionalidade do serviço de trabalho.

Dica

Todo o código-fonte do exemplo dos “Trabalhos no .NET” está disponível no Navegador de Exemplos para download. Para obter mais informações, confira Procurar exemplos de código: Trabalhos no .NET.

Pré-requisitos

Criar um novo projeto

Para criar um projeto do Serviço de Trabalho com o Visual Studio, selecione Arquivo>Novo>Projeto.... Na caixa de diálogo Criar um projeto, pesquise "Serviço de Trabalho" e selecione o modelo de Serviço de Trabalho. Insira o nome do projeto desejado, selecione um local apropriado e selecione Avançar. Na página Informações adicionais, para o Estrutura de Destino, selecione .NET 5.0 e marque a opção Habilitar Docker para habilitar o suporte do docker. Selecione o sistema operacional Docker desejado.

Para criar um novo projeto do Serviço de Trabalho com Visual Studio Code, você pode executar comandos da CLI do .NET no terminal integrado. Para obter mais informações, confira Visual Studio Code: Terminal Integrado.

Abra o terminal integrado e execute o comando dotnet newe substitua o <Project.Name> pelo nome do projeto desejado.

dotnet new worker --name <Project.Name>

Para obter mais informações sobre o novo comando do projeto de serviço de trabalho da CLI do .NET, confira dotnet new worker.

Para criar um novo projeto do Serviço de Trabalho com a CLI do .NET, abra seu terminal favorito em um diretório de trabalho. Execute o comando dotnet new e substitua <Project.Name> pelo nome do projeto desejado.

dotnet new worker --name <Project.Name>

Para obter mais informações sobre o novo comando do projeto de serviço de trabalho da CLI do .NET, confira dotnet new worker.

Crie o aplicativo para garantir que ele restaure os pacotes dependentes e seja compilado sem erros.

Para criar o aplicativo no Visual Studio, selecione F6 ou selecione a opção de menu Build>solução de build.

Para criar o aplicativo a partir de Visual Studio Code, abra a janela do terminal integrado e execute o comando dotnet build no diretório de trabalho.

dotnet build

Para obter mais informações sobre o comando de build da CLI do .NET, consulte dotnet build.

Para criar o aplicativo a partir da CLI do .NET, execute o comando dotnet build no diretório de trabalho.

dotnet build <path/to/project.csproj>

Especifique seu valor <path/to/project.csproj>, que é o caminho para o arquivo de projeto a ser compilado. Para obter mais informações sobre o comando de build da CLI do .NET, consulte dotnet build.

Adicionar suporte ao Docker

Se você selecionou corretamente a caixa de seleção Habilitar Docker ao criar um novo projeto de Trabalho, pule para a etapa Criar a imagem do Docker.

Se você não selecionou essa opção, não se preocupe, ainda poderá adicioná-la agora. No Visual Studio, clique com o botão direito do mouse no nó do projeto no Gerenciador de Soluções e selecione Adicionar>Suporte ao Docker. Você será solicitado a selecionar um sistema operacional de destino; selecione OK com a seleção padrão do sistema operacional.

Docker File Options

No Visual Studio Code, você precisa da extensão do Docker e da extensão da Conta do Azure instalada. Abra a Paleta de comandos e selecione a opção Docker: Adicionar arquivos do Docker ao espaço de trabalho. Se solicitado a Selecionar a Plataforma de Aplicativo, escolha .NET: Console Principal. Se solicitado a Selecionar Projeto, escolha o projeto do Serviço de Trabalho que você criou. Quando solicitado a Selecionar Sistema Operacional, escolha o primeiro sistema operacional listado. Quando solicitado se deseja ou não incluir arquivos opcionais Docker Compose, selecione Não.

O suporte ao Docker requer um Dockerfile. Esse arquivo é um conjunto de instruções abrangentes para criar seu Serviço de Trabalho do .NET como uma imagem do Docker. O Dockerfile é um arquivo sem uma extensão de arquivo. O código a seguir é um exemplo de Dockerfile e deve existir no diretório raiz do arquivo de projeto.

Com a CLI, o Dockerfilenão é criado para você. Copie seu conteúdo em um novo arquivo chamado Dockerfile no diretório raiz do projeto.

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"]

Observação

Você precisa atualizar as várias linhas no Dockerfile que fazem referência a *App.CloudService– substitua isso pelo nome do projeto.

Para obter mais informações sobre as imagens oficiais do .NET, consulte Docker Hub: .NET Runtime e Docker Hub: SDK do .NET.

Criar a imagem de Docker

Para criar a imagem do Docker, o Mecanismo do Docker deve estar em execução.

Importante

Ao usar o Docker Desktop e o Visual Studio, para evitar erros relacionados ao compartilhamento de volume, verifique se ele está habilitado.

  1. Na tela Configurações no Docker Desktop, selecione Unidades Compartilhadas.
  2. Selecione a(s) unidade(s) que contém os arquivos do projeto.

Para obter mais informações, consulte Solucionar problemas de desenvolvimento do Visual Studio com o Docker.

Clique com o botão direito do mouse no Dockerfile no Gerenciador de Soluções e selecione Criar Imagem do Docker. A janela Saída é exibida, relatando o progresso do docker build comando.

Clique com o botão direito do mouse no Dockerfile no Gerenciador de Soluções e selecione Criar Imagem do Docker. Quando solicitado a marcar a imagem como, insira appcloudservice:latest. O terminal de saída da Tarefa docker é exibido, relatando o progresso do comando de build do Docker.

Observação

Se você não for solicitado a marcar a imagem, é possível que Visual Studio Code esteja contando com um tasks.json existente. Se a marca usada for indesejável, você poderá alterá-la atualizando o valor do docker-build item de configuração dockerBuild/tag na matriz tasks. Considere a seguinte seção de configuração de exemplo:

{
  "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"
  }
}

Abra uma janela de terminal no diretório raiz do Dockerfile e execute o seguinte comando docker:

docker build -t appcloudservice:latest -f Dockerfile .

À medida que o comando docker build é executado, ele processa cada linha no Dockerfile como uma etapa de instrução. Esse comando constrói a imagem e cria um repositório local chamado myimage que aponta para essa imagem.

Dica

O Dockerfile gerado difere entre ambientes de desenvolvimento. Por exemplo, se você Adicionar suporte ao Docker do Visual Studio, poderá enfrentar problemas se tentar Criar a imagem do Docker do Visual Studio Code, pois as etapas do Dockerfile variam. É melhor escolher um único ambiente de desenvolvimento e usá-lo ao longo deste tutorial.

Criar um registro de contêiner

Um recurso ACR (Registro de Contêiner do Azure) permite criar, armazenar e gerenciar imagens de contêiner e artefatos em um registro privado. Para criar um registro de contêiner, você precisa criar um novo recurso no portal do Azure.

  1. Selecione a Assinatura e o Grupo de recursos correspondente (ou crie um novo).
  2. Insira um Nome de registro.
  3. Selecione um Local.
  4. Selecione um SKU apropriado, por exemplo, Básico.
  5. Selecione Examinar + criar.
  6. Depois de ver a Validação aprovada, selecione Criar.

Importante

Para usar esse registro de contêiner ao criar uma instância de contêiner, você deve habilitar Administração usuário. Selecione Chaves de acesso e habilite Administração usuário.

Um recurso ACR (Registro de Contêiner do Azure) permite criar, armazenar e gerenciar imagens de contêiner e artefatos em um registro privado. Abra uma janela de terminal no diretório raiz do Dockerfile e execute o seguinte comando docker:

Importante

Para interagir com os recursos do Azure da CLI do Azure, você deve ser autenticado para sua sessão de terminal. Para autenticar, use o comando az login:

az login

Depois de fazer logon, use o comando az account set para especificar sua assinatura quando tiver mais de uma e nenhuma assinatura padrão definida.

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

Depois de entrar na CLI do Azure, sua sessão poderá interagir com os recursos de acordo.

Se você ainda não tiver um grupo de recursos ao qual gostaria de associar seu serviço de trabalho, crie um usando o comando az group create:

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

Forneça o nome <resource group> e o <location>. Para criar um registro de contêiner, chame o comando az acr create.

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

Substitua os espaços reservados pelos seus próprios valores apropriados:

  • <registry name>: o nome da chave do registro.
  • <resource group>: o nome do grupo de recursos que você usou.
  • <sku>: valores aceitos, Básico, Clássico, Premium ou Standard.

O comando anterior:

  • Cria um Registro de Contêiner do Azure, dado um nome de registro, no grupo de recursos especificado.
  • Habilitado um usuário Administração – isso é necessário para Instâncias de Contêiner do Azure.

Para saber mais, confira Início Rápido: criar um registro de contêiner do Azure.

Enviar imagem por push para o Registro de contêiner

Com a imagem do Docker do .NET criada e o recurso de registro de contêiner criado, agora você pode enviar a imagem por push para o registro de contêiner.

Clique com o botão direito do mouse no projeto, no Gerenciador de Soluções, e selecione Publicar. A caixa de diálogo Publicar é exibida. Para o Destino, selecione Azure e , em seguida, Avançar.

Visual Studio: Publish dialog - select Azure

Em Destino Específico, selecione Registro de Contêiner do Azure e clique em Avançar.

Visual Studio: Publish dialog - select container registry

Em seguida, para o Registro de Contêiner, selecione o nome da assinatura que você usou para criar o recurso do ACR. Na área de seleção de registros de contêiner, selecione o registro de contêiner que você criou e selecione Concluir.

Visual Studio: Publish dialog - select container registry details

Isso cria um perfil de publicação, que pode ser usado para publicar a imagem no registro de contêiner. Selecione o botão Publicar para enviar a imagem por push ao registro de contêiner, a janela Saída relata o progresso da publicação e, quando ela for concluída com êxito, você verá uma mensagem "Publicado com êxito".

Selecione o Docker na Barra de Atividades em Visual Studio Code. Expanda o painel de exibição de árvore IMAGES e expanda o appcloudservice nó da imagem e clique com o botão direito do latest mouse na marca.

Visual Studio Code: Docker - push image

A janela do terminal integrado relata o progresso do comando docker push para o registro de contêiner.

Para enviar uma imagem por push para o registro de contêiner, você precisa entrar primeiro no Registro:

az acr login -n <registry name>

O comando az acr login entra em um registro de contêiner por meio da CLI do Docker. Para enviar a imagem por push para o registro de contêiner, use o comando az acr build com o nome do registro de contêiner como <registry name>:

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

O comando anterior:

  • Empacota a origem em um arquivo tar.
  • Carrega-o no registro de contêiner.
  • O registro de contêiner descompacta o arquivo tar.
  • Executa o comando docker build no recurso de registro de contêiner no Dockerfile.
  • Adiciona a imagem ao registro de contêiner.

Para verificar se a imagem foi enviada por push com êxito para o registro de contêiner, navegue até o portal do Azure. Abra o recurso de registro de contêiner, em Serviços, selecione Repositórios. Você deverá ver a imagem:

Implantar como instância de contêiner

No Visual Studio Code, selecione Docker na Barra de atividade. Expanda o nó REGISTRIES e selecione Conectar Registro. Selecione o Azure quando solicitado e entre, se necessário.

Importante

A implantação como uma instância de contêiner do Visual Studio Code não funciona mais no Mac. Para obter mais informações, confira GitHub: sobre a Extensão do Docker para Visual Studio Code.

Visual Studio Code - Docker: Connect registry

Expanda o nó REGISTRIES, selecione o Azure, sua assinatura > o registro de contêiner > da imagem e clique com o botão direito do mouse na marca. Selecione Implantar Imagem em Instâncias de Contêiner do Azure.

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

Para criar uma instância de contêiner, primeiro crie um grupo de contêineres usando o comando az container create.

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

Forneça os valores adequados.

  • <resource group>: o nome do grupo de recursos que você está usando neste tutorial.
  • <instance name>: O nome da instância de contêiner.
  • <registry name>: O nome do registro de contêiner.
  • <image name>: o nome da imagem
  • <password>: a senha para o registro de contêiner — você pode obtê-la no portal do Azure, recurso Registro de Contêiner >Chaves de acesso.

Para criar uma instância de contêiner, você também precisa criar um novo recurso no portal do Azure.

  1. Selecione a mesma Assinatura e o grupo de recursos correspondente da seção anterior.
  2. Insira um Nome de contêinerappcloudservice-container.
  3. Selecione uma região que corresponde à seleção de Local anterior.
  4. Para Origem da imagem, selecione Registro de Contêiner do Azure.
  5. Selecione o Registro pelo nome fornecido na etapa anterior.
  6. Selecione a marca Imagem e Imagem.
  7. Selecione Examinar + criar.
  8. Depois de ver a Validação aprovada, selecione Criar.

Pode levar um momento para que os recursos sejam criados, uma vez criados, selecione o botão Ir para o recurso.

Para saber mais, confira Início Rápido: criar uma instância de contêiner do Azure.

Verificar a funcionalidade do serviço

Imediatamente depois que a instância de contêiner é criada, ela começa a ser executada.

Para verificar se o serviço de trabalho está funcionando corretamente, navegue até o portal do Azure no recurso da instância de contêiner, selecione a opção Contêineres.

Azure portal: Container instance running

Você verá os contêineres e o Estado atual deles. Nesse caso, ele está Em execução. Selecione Logs para ver a saída do serviço de trabalho do .NET.

Para verificar se o serviço de trabalho está funcionando corretamente, você pode exibir os logs do aplicativo em execução. Use o comando az container logs:

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

Forneça os valores adequados.

  • <resource group>: o nome do grupo de recursos que você está usando neste tutorial.
  • <instance name>: O nome da instância de contêiner.

Você verá os logs de saída do serviço de trabalho do .NET, o que significa que você implantou com êxito seu aplicativo em contêineres na ACI.

Confira também