Uw Reliable Services en Reliable Actors van Service Fabric in Windows in een container plaatsen

Service Fabric ondersteunt het containeriseren van Service Fabric-microservices (Reliable Services en Reliable Actor-services). Zie Service Fabric-containers voor meer informatie.

Dit document bevat richtlijnen voor het uitvoeren van uw service in een Windows-container.

Notitie

Deze functie werkt momenteel alleen voor Windows. Als u containers wilt uitvoeren, moet het cluster worden uitgevoerd op Windows Server 2016 met containers.

Stappen voor het in een container plaatsen van uw Service Fabric-toepassing

  1. Open uw Service Fabric-toepassing in Visual Studio.

  2. Voeg klasse SFBinaryLoader.cs toe aan uw project. De code in deze klasse is een helper voor het correct laden van de binaire service fabric-runtimebestanden in uw toepassing wanneer deze wordt uitgevoerd in een container.

  3. Voor elk codepakket dat u in een container wilt plaatsen, initialiseert u het laadprogramma op het ingangspunt van het programma. Voeg de statische constructor die wordt weergegeven in het volgende codefragment toe aan het bestand met het programmainvoerpunt.

    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. Uw project bouwen en inpakken . Als u een pakket wilt maken en maken, klikt u met de rechtermuisknop op het toepassingsproject in Solution Explorer en kiest u de opdracht Pakket.

  5. Voer voor elk codepakket dat u in een container wilt plaatsen het PowerShell-script uitCreateDockerPackage.ps1. Het gebruik is als volgt:

    Volledige .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

      $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
    

    Het script maakt een map met Docker-artefacten op $dockerPackageOutputDirectoryPath. Wijzig het gegenereerde Dockerfile in expose alle poorten, voer installatiescripts uit, enzovoort. op basis van uw behoeften.

  6. Vervolgens moet u uw Docker-containerpakket bouwen en naar uw opslagplaats pushen .

  7. Wijzig de ApplicationManifest.xml en ServiceManifest.xml om uw containerinstallatiekopie, opslagplaatsgegevens, registerverificatie en toewijzing van poort naar host toe te voegen. Zie Een Azure Service Fabric-containertoepassing maken voor het wijzigen van de manifesten. De codepakketdefinitie in het servicemanifest moet worden vervangen door de bijbehorende containerinstallatiekopieën. Zorg ervoor dat u het EntryPoint wijzigt in een 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. Voeg de poort-naar-host-toewijzing toe voor uw replicator en service-eindpunt. Omdat beide poorten tijdens runtime door Service Fabric worden toegewezen, is de ContainerPort ingesteld op nul om de toegewezen poort te gebruiken voor toewijzing.

    <Policies>
    <ContainerHostPolicies CodePackageRef="Code">
     <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/>
     <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/>
    </ContainerHostPolicies>
    </Policies>
    
  9. Zie Isolatiemodus configureren voor informatie over het configureren van de modus voor containerisolatie. Windows ondersteunt twee isolatiemodi voor containers: proces en Hyper-V. De volgende codefragmenten laten zien hoe de isolatiemodus wordt opgegeven in het manifestbestand van de toepassing.

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

Notitie

Een Service Fabric-cluster is standaard één tenant en gehoste toepassingen worden als vertrouwd beschouwd. Als u overweegt niet-vertrouwde containertoepassingen te hosten, kunt u deze implementeren als gastcontainers en raadpleegt u Niet-vertrouwde toepassingen hosten in een Service Fabric-cluster.

  1. Als u deze toepassing wilt testen, moet u deze implementeren in een cluster met versie 5.7 of hoger. Voor runtimeversie 6.1 of lager moet u de clusterinstellingen bewerken en bijwerken om deze preview-functie in te schakelen. Volg de stappen in dit artikel om de volgende instelling toe te voegen.

      {
        "name": "Hosting",
        "parameters": [
          {
            "name": "FabricContainerAppsEnabled",
            "value": "true"
          }
        ]
      }
    
  2. Implementeer vervolgens het bewerkte toepassingspakket in dit cluster.

U hebt nu een Service Fabric-toepassing in een container waarop uw cluster wordt uitgevoerd.

Volgende stappen