Colocar o Service Fabric Reliable Services e o Reliable Actors em contentores no Windows

O Service Fabric oferece suporte à conteinerização de microsserviços do Service Fabric (serviços confiáveis e serviços baseados em atores confiáveis). Para obter mais informações, consulte Contêineres de malha de serviço.

Este documento fornece orientação para que seu serviço seja executado dentro de um contêiner do Windows.

Nota

Atualmente, esse recurso só funciona para Windows. Para executar contêineres, o cluster deve estar em execução no Windows Server 2016 com contêineres.

Etapas para conteinerizar seu aplicativo do Service Fabric

  1. Abra seu aplicativo Service Fabric no Visual Studio.

  2. Adicione SFBinaryLoader.cs de classe ao seu projeto. O código nesta classe é um auxiliar para carregar corretamente os binários de tempo de execução do Service Fabric dentro do seu aplicativo quando executado dentro de um contêiner.

  3. Para cada pacote de código que você gostaria de colocar em contêiner, inicialize o carregador no ponto de entrada do programa. Adicione o construtor estático mostrado no trecho de código a seguir ao seu arquivo de ponto de entrada do programa.

    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. Crie e empacote seu projeto. Para criar 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 Pacote .

  5. Para cada pacote de código que você precisa colocar em contêiner, execute o script do PowerShell CreateDockerPackage.ps1. O uso é o seguinte:

    .NET completo

      $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

      $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 no $dockerPackageOutputDirectoryPath. Modifique o Dockerfile gerado para expose quaisquer portas, execute scripts de configuração e assim por diante. com base nas suas necessidades.

  6. Em seguida, você precisa criar e enviar seu pacote de contêiner do Docker para o repositório.

  7. Modifique o ApplicationManifest.xml e o ServiceManifest.xml para adicionar a imagem do contêiner, as informações do repositório, a autenticação do Registro e o mapeamento de porta para host. Para modificar os manifestos, consulte Criar um aplicativo de contêiner do Azure Service Fabric. A definição do pacote de código no manifesto de serviço precisa ser substituída pela imagem de contêiner correspondente. Certifique-se de alterar o EntryPoint para um tipo ContainerHost.

    <!-- 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 para host para seu replicador e ponto de extremidade de serviço. Como ambas as 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.

    <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, consulte Configurar o modo de isolamento. O Windows suporta dois modos de isolamento para contentores: processo e Hyper-V. Os trechos a seguir mostram como o modo de isolamento é especificado no arquivo de manifesto do aplicativo.

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

Nota

Um cluster do Service Fabric é um único locatário por design e os aplicativos hospedados são considerados confiáveis. Se você estiver pensando em hospedar aplicativos de contêiner não confiáveis, considere implantá-los como contêineres convidados e consulte Hospedando aplicativos não confiáveis em um cluster do Service Fabric.

  1. Para testar esse aplicativo, você precisa implantá-lo em um cluster que esteja executando a versão 5.7 ou superior. Para versões de tempo de execução 6.1 ou inferiores, você precisa editar e atualizar as configurações do cluster para habilitar esse recurso de visualização. Siga as etapas neste artigo para adicionar a configuração mostrada a seguir.

      {
        "name": "Hosting",
        "parameters": [
          {
            "name": "FabricContainerAppsEnabled",
            "value": "true"
          }
        ]
      }
    
  2. Em seguida, implante o pacote de aplicativo editado neste cluster.

Agora você deve ter um aplicativo do Service Fabric em contêiner executando seu cluster.

Próximos passos