Konteneryzowanie usług Reliable Services i Reliable Actors usługi Service Fabric w systemie Windows

Usługa Service Fabric obsługuje konteneryzowanie mikrousług usługi Service Fabric (usługi Reliable Services i usługi oparte na niezawodnym aktorze). Aby uzyskać więcej informacji, zobacz Kontenery usługi Service Fabric.

Ten dokument zawiera wskazówki dotyczące uruchamiania usługi wewnątrz kontenera systemu Windows.

Uwaga

Obecnie ta funkcja działa tylko dla systemu Windows. Aby uruchomić kontenery, klaster musi być uruchomiony na Windows Server 2016 z kontenerami.

Kroki konteneryzacji aplikacji usługi Service Fabric

  1. Otwórz aplikację usługi Service Fabric w programie Visual Studio.

  2. Dodaj klasę SFBinaryLoader.cs do projektu. Kod w tej klasie jest pomocnikiem do poprawnego załadowania plików binarnych środowiska uruchomieniowego usługi Service Fabric wewnątrz aplikacji podczas uruchamiania wewnątrz kontenera.

  3. Dla każdego pakietu kodu, który chcesz konteneryzować, zainicjuj moduł ładujący w punkcie wejścia programu. Dodaj konstruktor statyczny pokazany w poniższym fragmencie kodu do pliku punktu wejścia programu.

    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. Skompiluj i spakuj projekt. Aby skompilować i utworzyć pakiet, kliknij prawym przyciskiem myszy projekt aplikacji w Eksplorator rozwiązań i wybierz polecenie Pakiet.

  5. Dla każdego pakietu kodu, który należy konteneryzować, uruchom skrypt programu PowerShell CreateDockerPackage.ps1. Użycie jest następujące:

    Pełna platforma .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
    

    Skrypt tworzy folder z artefaktami platformy Docker w $dockerPackageOutputDirectoryPath. Zmodyfikuj wygenerowany plik Dockerfile na expose dowolnych portach, uruchom skrypty konfiguracji itd. na podstawie Twoich potrzeb.

  6. Następnie należy skompilować i wypchnąć pakiet kontenera platformy Docker do repozytorium.

  7. Zmodyfikuj ApplicationManifest.xml i ServiceManifest.xml, aby dodać obraz kontenera, informacje o repozytorium, uwierzytelnianie rejestru i mapowanie port-host. Aby zmodyfikować manifesty, zobacz Tworzenie aplikacji kontenera usługi Azure Service Fabric. Definicja pakietu kodu w manifeście usługi musi zostać zastąpiona odpowiednim obrazem kontenera. Pamiętaj, aby zmienić typ EntryPoint na 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. Dodaj mapowanie port-host dla replikatora i punktu końcowego usługi. Ponieważ oba te porty są przypisywane w czasie wykonywania przez usługę Service Fabric, port ContainerPort jest ustawiony na zero, aby użyć przypisanego portu do mapowania.

    <Policies>
    <ContainerHostPolicies CodePackageRef="Code">
     <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/>
     <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/>
    </ContainerHostPolicies>
    </Policies>
    
  9. Aby skonfigurować tryb izolacji kontenera, zobacz Konfigurowanie trybu izolacji. System Windows obsługuje dwa tryby izolacji dla kontenerów: tryb procesu oraz tryb funkcji Hyper-V. Poniższe fragmenty kodu pokazują, jak tryb izolacji jest określony w pliku manifestu aplikacji.

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

Uwaga

Klaster usługi Service Fabric jest jedną dzierżawą według projektu, a hostowane aplikacje są uznawane za zaufane. Jeśli rozważasz hostowanie niezaufanych aplikacji kontenerów, rozważ wdrożenie ich jako kontenerów gościa i zobacz Hosting niezaufanych aplikacji w klastrze usługi Service Fabric.

  1. Aby przetestować tę aplikację, należy wdrożyć ją w klastrze z uruchomioną wersją 5.7 lub nowszą. W przypadku wersji środowiska uruchomieniowego w wersji 6.1 lub nowszej należy edytować i zaktualizować ustawienia klastra, aby włączyć tę funkcję w wersji zapoznawczej. Wykonaj kroki opisane w tym artykule , aby dodać wyświetlone ustawienie dalej.

      {
        "name": "Hosting",
        "parameters": [
          {
            "name": "FabricContainerAppsEnabled",
            "value": "true"
          }
        ]
      }
    
  2. Następnie wdróż edytowany pakiet aplikacji w tym klastrze.

Teraz powinna istnieć konteneryzowana aplikacja usługi Service Fabric z uruchomionym klastrem.

Następne kroki