Condividi tramite


Distribuire in un contenitore Reliable Services e Reliable Actors di Service Fabric in Windows

Service Fabric supporta la distribuzione in un contenitore di microservizi di Service Fabric (servizi di base di Reliable Services e Reliable Actors). Per altre informazioni, vedere Service Fabric e contenitori.

Questo documento fornisce linee guida per eseguire il servizio all'interno di un contenitore di Windows.

Nota

Attualmente questa funzionalità funziona solo per Windows. Per eseguire contenitori, il cluster deve essere in esecuzione in Windows Server 2016 with Containers.

Procedura per distribuire in un contenitore l'applicazione Service Fabric

  1. Aprire l'applicazione di Service Fabric in Visual Studio.

  2. Aggiungere la classe SFBinaryLoader.cs al progetto. Il codice in questa classe è un metodo di supporto per caricare correttamente i file binari di runtime di Service Fabric all'interno dell'applicazione quando è in esecuzione all'interno di un contenitore.

  3. Per ogni pacchetto di codice che si desidera distribuire in un contenitore, inizializzare il caricatore nel punto di ingresso del programma. Aggiungere il costruttore statico illustrato nel frammento di codice seguente al file del punto di ingresso del programma.

    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. Compilare e inserire in un pacchetto il progetto. Per costruire e creare un pacchetto, fare clic con il pulsante destro sul progetto dell'applicazione in Esplora soluzioni e scegliere il comando Pacchetto.

  5. Per ogni pacchetto di codice che è necessario distribuire in un contenitore, eseguire lo script di PowerShell CreateDockerPackage.ps1. L'utilizzo è il seguente:

    .NET completo

      $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
    

    Lo script crea una cartella con gli elementi di Docker in $dockerPackageOutputDirectoryPath. Modificare il Dockerfile generato per expose le porte, eseguire gli script di configurazione e così via in base alle proprie esigenze.

  6. È quindi necessario compilare ed eseguire il push del pacchetto del contenitore Docker nel repository.

  7. Modificare ApplicationManifest.xml e ServiceManifest.xml per aggiungere l'immagine del contenitore, le informazioni sul repository, l'autenticazione del registro di sistema e il mapping tra porta e host. Per modificare i manifesti, vedere Creare la prima applicazione contenitore di Service Fabric in Windows. La definizione del pacchetto di codice nel manifesto del servizio deve essere sostituita con l'immagine del contenitore corrispondente. Verificare di modificare il punto di ingresso in un tipo 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. Aggiungere il mapping da porta a host per la replica e un endpoint di servizio. Poiché entrambe queste porte vengono assegnate in fase di esecuzione di Service Fabric, il ContainerPort è impostato su zero per usare la porta assegnata per il mapping.

    <Policies>
    <ContainerHostPolicies CodePackageRef="Code">
     <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/>
     <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/>
    </ContainerHostPolicies>
    </Policies>
    
  9. Per configurare la modalità di isolamento del contenitore, consultare Configurare modalità di isolamento. Windows supporta due modalità di isolamento per i contenitori: la modalità processo e la modalità Hyper-V. I frammenti seguenti indicano come viene specificata la modalità di isolamento nel file manifesto dell'applicazione.

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

Nota

Un cluster di Service Fabric è un tenant singolo per progettazione e le applicazioni ospitate vengono considerate attendibili. Se si sta valutando di ospitare applicazioni contenitore non attendibili, provare a distribuirle come contenitori guest e vedere Hosting di applicazioni non attendibili in un cluster di Service Fabric.

  1. Per testare questa applicazione, è necessario distribuirla in un cluster che esegue la versione 5.7 o versioni successive. Per le versioni runtime 6.1 o precedenti, è necessario modificare e aggiornare le impostazioni del cluster per abilitare questa funzionalità in anteprima. Seguire la procedura in questo articolo per aggiungere l'impostazione illustrata di seguito.

      {
        "name": "Hosting",
        "parameters": [
          {
            "name": "FabricContainerAppsEnabled",
            "value": "true"
          }
        ]
      }
    
  2. Successivamente, distribuire il pacchetto di applicazioni modificato in questo cluster.

Ora si dovrebbe avere un'applicazione di Service Fabric distribuita nei contenitori che esegue il cluster.

Passaggi successivi