Share via


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

Service Fabric biedt ondersteuning voor 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 containeriseren 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 bestanden van de Service Fabric-runtime in uw toepassing wanneer deze in een container wordt uitgevoerd.

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

    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. Bouw uw project en pak het in . 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 moet containeriseren het PowerShell-script CreateDockerPackage.ps1 uit. Het gebruik is als volgt:

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

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

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

  7. Wijzig de ApplicationManifest.xml en ServiceManifest.xml om uw containerinstallatiekopie, opslagplaatsgegevens, registerverificatie en poort-naar-hosttoewijzing toe te voegen. Zie Een Azure Service Fabric-containertoepassing maken voor het wijzigen van de manifesten. De definitie van het codepakket 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-hosttoewijzing toe voor uw replicator en service-eindpunt. Omdat beide poorten tijdens runtime door Service Fabric worden toegewezen, wordt 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 De isolatiemodus voor containers configureren voor informatie over het configureren van de isolatiemodus. Windows ondersteunt twee isolatiemodi voor containers: proces en Hyper-V. De volgende fragmenten laten zien hoe de isolatiemodus is 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 beschouwd als vertrouwd. Als u overweegt om niet-vertrouwde containertoepassingen te hosten, kunt u overwegen deze als gastcontainers te implementeren 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 moet nu een Service Fabric-toepassing in een container hebben waarop uw cluster wordt uitgevoerd.

Volgende stappen