Windows で Service Fabric Reliable Services と Reliable Actors をコンテナー化する

Service Fabric は、Service Fabric マイクロサービス (Reliable Services と Reliable Actor ベースのサービス) のコンテナー化をサポートしています。 詳細については、「Service Fabric とコンテナー」を参照してください。

このドキュメントは、Windows コンテナー内でサービスを実行させるためのガイダンスとなっています。

Note

現在、この機能は Windows でのみ機能します。 コンテナーを実行するには、Windows Server 2016 with Containers でクラスターを実行する必要があります。

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 アーティファクトを含むフォルダーを作成します。 生成された Docker ファイルを変更して、必要に応じて任意のポートを expose したり、セットアップ スクリプトを実行したりします。

  6. 次に、Docker コンテナー パッケージをビルドしてリポジトリにプッシュします。

  7. ApplicationManifest.xml と ServiceManifest.xml を変更し、コンテナー イメージ、リポジトリ情報、レジストリ認証、ポートとホスト間のマッピングを追加します。 マニフェストを変更する方法については、「Windows で初めての 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 では、コンテナーの 2 つの分離モード (プロセスおよび Hyper-V) がサポートされます。 以下のスニペットは、アプリケーション マニフェスト ファイルで分離モードがどのように指定されるかを示しています。

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

Note

Service Fabric クラスターはシングル テナントとして設計されており、ホストされるアプリケーションは信頼できるものと見なされます。 信頼されていないコンテナー アプリケーションのホストを検討している場合は、それらをゲスト コンテナーとしてデプロイすることを検討し、「Service Fabric クラスターでの信頼されていないアプリケーションのホスト」をご覧ください。

  1. このアプリケーションをテストするには、バージョン 5.7 以降を実行しているクラスターにデプロイする必要があります。 ラインタイム バージョンが 6.1 以前の場合は、このプレビュー機能を有効にするようにクラスター設定を編集および更新する必要があります。 この記事の手順に従って、次のように設定を追加します。

      {
        "name": "Hosting",
        "parameters": [
          {
            "name": "FabricContainerAppsEnabled",
            "value": "true"
          }
        ]
      }
    
  2. 次に、編集したアプリケーション パッケージをこのクラスターにデプロイします。

以上の手順で、クラスターを実行しているコンテナー化された Service Fabric アプリケーションが作成されます。

次のステップ