Colocar em contêineres seus Reliable Services e Reliable Actors do Service Fabric no WindowsContainerize your Service Fabric Reliable Services and Reliable Actors on Windows

O Service Fabric oferece suporte a colocação em contêineres de microsserviços do Service Fabric (serviços baseados em Reliable Services e Reliable Actors).Service Fabric supports containerizing Service Fabric microservices (Reliable Services, and Reliable Actor based services). Para saber mais, confira contêineres do Service Fabric.For more information, see service fabric containers.

Este documento fornece diretrizes para colocar o serviço em execução dentro de um contêiner do Windows.This document provides guidance to get your service running inside a Windows container.

Observação

Atualmente, esse recurso só funciona para Windows.Currently this feature only works for Windows. Para executar contêineres, o cluster deve estar em execução no Windows Server 2016 com Contêineres.To run containers, the cluster must be running on Windows Server 2016 with Containers.

Etapas para colocar seu aplicativo do Service Fabric em contêineresSteps to containerize your Service Fabric Application

  1. Abra seu aplicativo do Service Fabric no Visual Studio.Open your Service Fabric application in Visual Studio.

  2. Adicione a classe SFBinaryLoader.cs ao seu projeto.Add class SFBinaryLoader.cs to your project. O código nessa classe é um auxiliar para carregar corretamente os binários de tempo de execução do Service Fabric dentro de seu aplicativo durante a execução dentro de um contêiner.The code in this class is a helper to correctly load the Service Fabric runtime binaries inside your application when running inside a container.

  3. Para cada pacote de código que você quer colocar em contêineres, inicialize o carregador no ponto de entrada do programa.For each code package you would like to containerize, initialize the loader at the program entry point. Adicione o construtor estático mostrado no snippet de código a seguir ao seu arquivo de ponto de entrada do programa.Add the static constructor shown in the following code snippet to your program entry point file.

    namespace MyApplication
    {
       internal static class Program
       {
           static Program()
           {
               SFBinaryLoader.Initialize();
           }
    
           /// <summary>
           /// This is the entry point of the service host process.
           /// </summary>
           private static void Main()
           {
    
  4. Compilar e empacotar seu projeto.Build and package your project. Para compilar e criar um pacote, clique com o botão direito do mouse no projeto de aplicativo no Gerenciador de Soluções e escolha o comando Empacotar.To build and create a package, right-click the application project in Solution Explorer and choose the Package command.

  5. Para cada pacote de códigos que você precisa colocar em contêineres, execute o script do PowerShell CreateDockerPackage.ps1.For every code package you need to containerize, run the PowerShell script CreateDockerPackage.ps1. A utilização é o seguinte:The usage is as follows:

    .NET completoFull .NET

      $codePackagePath = 'Path to the code package to containerize.'
      $dockerPackageOutputDirectoryPath = 'Output path for the generated docker folder.'
      $applicationExeName = 'Name of the Code package executable.'
      CreateDockerPackage.ps1 -CodePackageDirectoryPath $codePackagePath -DockerPackageOutputDirectoryPath $dockerPackageOutputDirectoryPath -ApplicationExeName $applicationExeName
    

    .NET Core.NET Core

      $codePackagePath = 'Path to the code package to containerize.'
      $dockerPackageOutputDirectoryPath = 'Output path for the generated docker folder.'
      $dotnetCoreDllName = 'Name of the Code package dotnet Core Dll.'
      CreateDockerPackage.ps1 -CodePackageDirectoryPath $codePackagePath -DockerPackageOutputDirectoryPath $dockerPackageOutputDirectoryPath -DotnetCoreDllName $dotnetCoreDllName
    

    O script cria uma pasta com artefatos do Docker em $dockerPackageOutputDirectoryPath.The script creates a folder with Docker artifacts at $dockerPackageOutputDirectoryPath. Modifique o Dockerfile gerado para expose quaisquer portas, executar scripts de configuração e assim por diante.Modify the generated Dockerfile to expose any ports, run setup scripts and so on. com base em suas necessidades.based on your needs.

  6. Em seguida você precisa compilar e enviar por push seu pacote de contêineres do Docker ao seu repositório.Next you need to build and push your Docker container package to your repository.

  7. Modifique o ApplicationManifest.xml e ServiceManifest.xml a fim de adicionar a imagem de contêiner, informações do repositório, autenticação do registro e mapeamento de porta ao host.Modify the ApplicationManifest.xml and ServiceManifest.xml to add your container image, repository information, registry authentication, and port-to-host mapping. Para modificar os manifestos, confira Criar um aplicativo de contêiner do Azure Service Fabric.For modifying the manifests, see Create an Azure Service Fabric container application. A definição de pacote de códigos no manifesto do serviço precisa ser substituída pela imagem de contêiner correspondente.The code package definition in the service manifest needs to be replaced with corresponding container image. Altere o Ponto de Entrada para um tipo de ContainerHost.Make sure to change the EntryPoint to a ContainerHost type.

    <!-- Code package is your service executable. -->
    <CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
     <!-- Follow this link for more information about deploying Windows containers to Service Fabric: https://aka.ms/sfguestcontainers -->
     <ContainerHost>
       <ImageName>myregistry.azurecr.io/samples/helloworldapp</ImageName>
     </ContainerHost>
    </EntryPoint>
    <!-- Pass environment variables to your container: -->
    </CodePackage>
    
  8. Adicione o mapeamento de porta ao host para seu replicador e ponto de extremidade de serviço.Add the port-to-host mapping for your replicator and service endpoint. Como essas duas portas são atribuídas em tempo de execução pelo Service Fabric, o ContainerPort é definido como zero para usar a porta atribuída para mapeamento.Since both these ports are assigned at runtime by Service Fabric, the ContainerPort is set to zero to use the assigned port for mapping.

    <Policies>
    <ContainerHostPolicies CodePackageRef="Code">
     <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/>
     <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/>
    </ContainerHostPolicies>
    </Policies>
    
  9. Para configurar o modo de isolamento de contêiner, veja Configurar o modo de isolamento.For configuring container isolation mode, see Configure isolation mode. O Windows dá suporte a dois modos de isolamento para contêineres: processo e Hyper-V.Windows supports two isolation modes for containers: process and Hyper-V. O snippet a seguir mostra como o modo de isolamento é especificado no arquivo de manifesto do aplicativo.The following snippets show how the isolation mode is specified in the application manifest file.

    <Policies>
    <ContainerHostPolicies CodePackageRef="Code" Isolation="process">
    ...
    </ContainerHostPolicies>
    </Policies>
    
    <Policies>
    <ContainerHostPolicies CodePackageRef="Code" Isolation="hyperv">
    ...
    </ContainerHostPolicies>
    </Policies>
    

Observação

Por padrão, os aplicativos do Service Fabric têm acesso ao tempo de execução do Service Fabric, na forma de um ponto de extremidade aceitando solicitações específicas do aplicativo.By default, Service Fabric applications have access to the Service Fabric runtime, in the form of an endpoint accepting application-specific requests. Considere desabilitar esse acesso quando o aplicativo hospeda o código não confiável.Consider disabling this access when the application hosts untrusted code. Para obter mais informações, consulte práticas recomendadas de segurança no Service Fabric.For more information, please see security best practices in Service Fabric. Para desabilitar o acesso ao tempo de execução do Service Fabric, adicione a seguinte configuração na seção de políticas do manifesto do aplicativo que corresponde ao manifesto do serviço importado, da seguinte maneira:To disable access to the Service Fabric runtime, add the following setting in the Policies section of the application manifest corresponding to the imported service manifest, as follows:

  <Policies>
      <ServiceFabricRuntimeAccessPolicy RemoveServiceFabricRuntimeAccess="true"/>
  </Policies>
  1. Para testar esse aplicativo, você precisa implantá-lo em um cluster que esteja executando a versão 5.7 ou superior.To test this application, you need to deploy it to a cluster that is running version 5.7 or higher. Para a versão 6.1 do tempo de execução ou versões inferiores, você precisa editar e atualizar as configurações de cluster para habilitar essa versão prévia do recurso.For runtime versions 6.1 or lower, you need to edit and update the cluster settings to enable this preview feature. Execute as etapas neste artigo para adicionar a configuração mostrada a seguir.Follow the steps in this article to add the setting shown next.

      {
        "name": "Hosting",
        "parameters": [
          {
            "name": "FabricContainerAppsEnabled",
            "value": "true"
          }
        ]
      }
    
  2. Depois, implante o pacote de aplicativos editado nesse cluster.Next deploy the edited application package to this cluster.

Agora você deve ter um aplicativo do Service Fabric em contêineres executando seu cluster.You should now have a containerized Service Fabric application running your cluster.

Próximas etapasNext steps