共用方式為


將 Windows 上的 Service Fabric Reliable Services 和 Reliable Actors 容器化

Service Fabric 支援將 Service Fabric 微服務 (Reliable Services 和 Reliable Actors 型服務) 容器化。 如需詳細資訊,請參閱 Service Fabric 容器

本文件可指引您如何讓服務在 Windows 容器內執行。

注意

此功能目前僅適用於 Windows。 若要執行容器,叢集必須執行於具有容器的 Windows Server 2016 上。

用來將 Service Fabric 應用程式容器化的步驟

  1. 在 Visual Studio 中開啟 Service Fabric 應用程式。

  2. SFBinaryLoader.cs 類別新增至您的專案。 此類別的程式碼是協助程式,用以在容器內執行應用程式時,於應用程式內正確載入 Service Fabric 執行階段二進位檔。

  3. 針對每個想要容器化的程式碼套件,於程式進入點初始化載入器。 將下列程式碼片段所示的靜態建構函式新增至程式的進入點檔案。

    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. 建置和封裝您的專案。 若要建置和建立套件,請以滑鼠右鍵按一下方案總管中的應用程式專案,然後選擇 [封裝] 命令。

  5. 針對每個需要容器化的程式碼套件,執行 PowerShell 指令碼 CreateDockerPackage.ps1。 使用方式如下:

    完整的 .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
    

    指令碼會在 $dockerPackageOutputDirectoryPath 建立具有 Docker 構件的資料夾。 根據您的需求修改所產生的 Dockerfile,以 expose (公開) 任何連接埠、執行安裝指令碼等等。

  6. 接下來,您需要建置 Docker 容器套件並將其推送至您的存放庫。

  7. 修改 ApplicationManifest.xml 和 ServiceManifest.xml 以新增容器映像、存放庫資訊、登錄驗證和「連接埠與主機的對應」。 若要修改資訊清單,請參閱建立 Azure Service Fabric 容器應用程式。 服務資訊清單中的程式碼套件定義需以對應的容器映像來加以取代。 請務必要將 EntryPoint 變更為 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. 為您的複寫器和服務端點新增「連接埠與主機的對應」。 這兩個連接埠都會在執行階段由 Service Fabric 加以指派,因此 ContainerPort 會設定為零以使用指派的連接埠來進行對應。

    <Policies>
    <ContainerHostPolicies CodePackageRef="Code">
     <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/>
     <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/>
    </ContainerHostPolicies>
    </Policies>
    
  9. 若要設定容器隔離模式,請參閱設定隔離模式。 Windows 支援兩種容器隔離模式:分別為處理序和 Hyper-V。 下列程式碼片段顯示如何在應用程式資訊清單檔中指定隔離模式。

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

注意

Service Fabric 叢集的設計是單一租用戶,託管的應用程式則視為是受信任。 如果您考慮託管「不受信任的容器應用程式」,則請考慮將它們部署為來賓容器,並請參閱在 Service Fabric 叢集中託管不受信任的應用程式

  1. 若要測試此應用程式,您必須將它部署至執行 5.7 版或更高版本的叢集。 若為執行階段 6.1 版或更低版本,您還需要編輯和更新叢集設定,以啟用此預覽功能。 請遵循這篇文章中的步驟,以新增接下來顯示的設定。

      {
        "name": "Hosting",
        "parameters": [
          {
            "name": "FabricContainerAppsEnabled",
            "value": "true"
          }
        ]
      }
    
  2. 接著,將編輯過的應用程式套件部署至此叢集。

現在,您的叢集中應該會有正在執行的容器化 Service Fabric 應用程式。

下一步