Windows'da Service Fabric Reliable Services ve Reliable Actors kapsayıcıları

Service Fabric, Service Fabric mikro hizmetlerinin (Reliable Services ve Reliable Actor tabanlı hizmetler) kapsayıcılı hale getirmesini destekler. Daha fazla bilgi için bkz. Service Fabric kapsayıcıları.

Bu belge, hizmetinizin bir Windows kapsayıcısı içinde çalışmasını sağlamak için rehberlik sağlar.

Not

Şu anda bu özellik yalnızca Windows için çalışır. Kapsayıcıları çalıştırmak için kümenin Kapsayıcılar ile Windows Server 2016 üzerinde çalışıyor olması gerekir.

Service Fabric Uygulamanızı kapsayıcıya alma adımları

  1. Visual Studio'da Service Fabric uygulamanızı açın.

  2. Projenize SFBinaryLoader.cs sınıfını ekleyin. Bu sınıftaki kod, bir kapsayıcı içinde çalışırken Service Fabric çalışma zamanı ikili dosyalarını uygulamanızın içine doğru bir şekilde yüklemek için bir yardımcıdır.

  3. Kapsayıcıya almak istediğiniz her kod paketi için program giriş noktasında yükleyiciyi başlatın. Aşağıdaki kod parçacığında gösterilen statik oluşturucuyu program giriş noktası dosyanıza ekleyin.

    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. Projenizi derleyin ve paketleyin . Paket oluşturmak ve oluşturmak için Çözüm Gezgini'da uygulama projesine sağ tıklayın ve Paket komutunu seçin.

  5. Kapsayıcıya almanız gereken her kod paketi için CreateDockerPackage.ps1PowerShell betiğini çalıştırın. Kullanım aşağıdaki gibidir:

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

    Betik, $dockerPackageOutputDirectoryPath docker yapıtları içeren bir klasör oluşturur. Oluşturulan Dockerfile expose dosyasını herhangi bir bağlantı noktasıyla değiştirin, kurulum betiklerini çalıştırın ve bu şekilde devam edin.

  6. Ardından Docker kapsayıcı paketinizi oluşturup deponuza göndermeniz gerekir.

  7. Kapsayıcı görüntünüzü, depo bilgilerinizi, kayıt defteri kimlik doğrulamasını ve bağlantı noktasından ana bilgisayara eşlemeyi eklemek için ApplicationManifest.xml ve ServiceManifest.xml değiştirin. Bildirimleri değiştirmek için bkz. Azure Service Fabric kapsayıcı uygulaması oluşturma. Hizmet bildirimindeki kod paketi tanımının ilgili kapsayıcı görüntüsüyle değiştirilmesi gerekir. EntryPoint'i ContainerHost türü olarak değiştirdiğinizden emin olun.

    <!-- 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. Çoğaltıcınız ve hizmet uç noktanız için bağlantı noktasından ana bilgisayara eşlemeyi ekleyin. Her iki bağlantı noktası da Service Fabric tarafından çalışma zamanında atandığından, Eşleme için atanan bağlantı noktasını kullanmak üzere ContainerPort sıfır olarak ayarlanır.

    <Policies>
    <ContainerHostPolicies CodePackageRef="Code">
     <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/>
     <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/>
    </ContainerHostPolicies>
    </Policies>
    
  9. Kapsayıcı yalıtım modunu yapılandırmak için bkz. Yalıtım modunu yapılandırma. Windows, kapsayıcılar için iki yalıtım modunu destekler: İşlem ve Hyper-V. Aşağıdaki kod parçacıkları, yalıtım modunun uygulama bildirim dosyasında nasıl belirtildiğini gösterir.

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

Not

Service Fabric kümesi tasarım gereği tek kiracıdır ve barındırılan uygulamalar güvenilir olarak kabul edilir. Güvenilmeyen kapsayıcı uygulamalarını barındırmayı düşünüyorsanız, bunları konuk kapsayıcılar olarak dağıtmayı göz önünde bulundurun ve bkz. Service Fabric kümesinde güvenilmeyen uygulamaları barındırma.

  1. Bu uygulamayı test etmek için 5.7 veya üzeri bir sürümü çalıştıran bir kümeye dağıtmanız gerekir. Çalışma zamanı 6.1 veya üzeri sürümlerde, bu önizleme özelliğini etkinleştirmek için küme ayarlarını düzenlemeniz ve güncelleştirmeniz gerekir. Sonraki adımda gösterilen ayarı eklemek için bu makaledeki adımları izleyin.

      {
        "name": "Hosting",
        "parameters": [
          {
            "name": "FabricContainerAppsEnabled",
            "value": "true"
          }
        ]
      }
    
  2. Ardından, düzenlenen uygulama paketini bu kümeye dağıtın .

Artık kümenizi çalıştıran kapsayıcılı bir Service Fabric uygulamanız olmalıdır.

Sonraki adımlar