Freigeben über


Packen Ihrer Reliable Services und Reliable Actors von Service Fabric in Container unter Windows

Service Fabric unterstützt das Packen von Service Fabric-Microservices (auf Reliable Services und Reliable Actors basierende Dienste) in Container. Weitere Informationen finden Sie unter Service Fabric und Container.

Dieses Dokument enthält Anweisungen für die Schritte zum Ausführen Ihrer Dienste in einem Windows-Container.

Hinweis

Dieses Feature steht derzeit nur für Windows zur Verfügung. Wenn Sie Container verwenden möchten, muss der Cluster unter Windows Server 2016 mit Containern betrieben werden.

Schritte zum Packen Ihrer Service Fabric-Anwendung in einen Container

  1. Öffnen Sie Ihre Service Fabric-Anwendung in Visual Studio.

  2. Fügen Sie Ihrem Projekt die Klasse SFBinaryLoader.cs hinzu. Bei dem Code in dieser Klasse handelt es sich um ein Hilfsprogramm, mit dem die Binärdateien der Service Fabric-Laufzeit korrekt in der Anwendung geladen werden, wenn die Ausführung innerhalb eines Containers erfolgt.

  3. Initialisieren Sie für jedes Codepaket, das Sie in einen Container packen möchten, das Ladeprogramm am Programmeinstiegspunkt. Fügen Sie Ihrer Programmeinstiegspunkt-Datei den statischen Konstruktor aus dem folgenden Codeausschnitt hinzu.

    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. Erstellen und Packen Sie Ihr Projekt. Klicken Sie zum Erstellen des Projekts und eines Pakets im Projektmappen-Explorer mit der rechten Maustaste auf das Anwendungsprojekt, und wählen Sie den Befehl Paket aus.

  5. Führen Sie für jedes Codepaket, das Sie in einen Container packen möchten, das PowerShell-Skript CreateDockerPackage.ps1 aus. Die Nutzung lautet wie folgt:

    Vollständiges .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
    

    Das Skript erstellt unter „$dockerPackageOutputDirectoryPath“ einen Ordner mit Docker-Artefakten. Ändern Sie die generierte Dockerfile-Datei, um je nach Anforderungen beispielsweise Ports verfügbar zu machen (expose), Setupskripts auszuführen usw.

  6. Als Nächstes müssen Sie Ihr Docker-Containerpaket erstellen und an Ihr Repository pushen.

  7. Ändern Sie die Dateien „ApplicationManifest.xml“ und „ServiceManifest.xml“, um das Containerimage, Repositoryinformationen, die Registrierungsauthentifizierung und die Port-zu-Host-Zuordnung hinzuzufügen. Informationen zum Ändern der Manifeste finden Sie unter Erstellen Ihrer ersten Service Fabric-Containeranwendung unter Windows. Die Codepaketdefinition im Dienstmanifest muss durch das entsprechende Containerimage ersetzt werden. Legen Sie den Einstiegspunkt auf einen Containerhosttyp fest.

    <!-- 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. Fügen Sie die Port-zu-Host-Zuordnung für Ihren Replikator- und Dienstendpunkt hinzu. Da diese beiden Ports zur Laufzeit von Service Fabric zugewiesen werden, wird der Containerport auf „0“ festgelegt, um den zugewiesenen Port für die Zuordnung zu verwenden.

    <Policies>
    <ContainerHostPolicies CodePackageRef="Code">
     <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/>
     <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/>
    </ContainerHostPolicies>
    </Policies>
    
  9. Informationen zum Konfigurieren des Containerisolationsmodus finden Sie unter Konfigurieren des Isolationsmodus. Windows unterstützt zwei Isolationsmodi für Container: Prozesse und Hyper-V. In den folgenden Codeausschnitten wird gezeigt, wie der Isolationsmodus in der Anwendungsmanifestdatei angegeben wird.

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

Hinweis

Ein Service Fabric-Cluster ist standardmäßig ein einzelner Mandant, und gehostete Anwendungen werden als vertrauenswürdig eingestuft. Wenn Sie nicht vertrauenswürdige Containeranwendungen hosten möchten, sollten Sie erwägen, diese als Gastcontainer bereitzustellen. Beachten Sie außerdem die Hinweise unter Hosting nicht vertrauenswürdiger Anwendungen in einem Service Fabric-Cluster.

  1. Zum Testen der Anwendung muss sie in einem Cluster bereitgestellt werden, der mindestens über die Version 5.7 verfügt. Bei Runtimes unter Version 6.1 müssen Sie die Clustereinstellungen bearbeiten und aktualisieren, um diese Previewfunktion zu aktivieren. Führen Sie die Schritte in diesem Artikel aus, um die folgende Einstellung hinzuzufügen:

      {
        "name": "Hosting",
        "parameters": [
          {
            "name": "FabricContainerAppsEnabled",
            "value": "true"
          }
        ]
      }
    
  2. Führen Sie als Nächstes die Bereitstellung des bearbeiteten Anwendungspakets für diesen Cluster durch.

Sie verfügen nun über eine in einen Container gepackte Service Fabric-Anwendung, die in Ihrem Cluster ausgeführt wird.

Nächste Schritte