Containeranpassa Service Fabric Reliable Services och Reliable Actors i Windows
Service Fabric har stöd för containerisering av Service Fabric-mikrotjänster (Reliable Services och Reliable Actor-baserade tjänster). Mer information finns i Service Fabric-containrar.
Det här dokumentet innehåller vägledning för att få tjänsten att köras i en Windows-container.
Kommentar
För närvarande fungerar den här funktionen endast för Windows. Om du vill köra containrar måste klustret köras på Windows Server 2016 med containrar.
Steg för att containerisera ditt Service Fabric-program
Öppna ditt Service Fabric-program i Visual Studio.
Lägg till klass SFBinaryLoader.cs i projektet. Koden i den här klassen är en hjälp för att korrekt läsa in Service Fabric-runtime-binärfilerna i programmet när den körs i en container.
Initiera inläsaren vid programmets startpunkt för varje kodpaket som du vill containerisera. Lägg till den statiska konstruktorn som visas i följande kodfragment i programmets startpunktsfil.
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() {
Skapa och paketera projektet. Om du vill skapa och skapa ett paket högerklickar du på programprojektet i Istraživač rešenja och väljer kommandot Paket.
Kör PowerShell-skriptet CreateDockerPackage.ps1 för varje kodpaket som du behöver containerisera. Användningen är följande:
Fullständig .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
Skriptet skapar en mapp med Docker-artefakter på $dockerPackageOutputDirectoryPath. Ändra den genererade Dockerfile till
expose
alla portar, kör installationsskript och så vidare. Baserat på dina behov.Därefter måste du skapa och push-överföra Docker-containerpaketet till lagringsplatsen.
Ändra ApplicationManifest.xml och ServiceManifest.xml för att lägga till din containeravbildning, lagringsplatsinformation, registerautentisering och port-till-värd-mappning. Information om hur du ändrar manifesten finns i Skapa ett Azure Service Fabric-containerprogram. Kodpaketdefinitionen i tjänstmanifestet måste ersättas med motsvarande containeravbildning. Se till att ändra EntryPoint till en ContainerHost-typ.
<!-- 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>
Lägg till port-till-värd-mappningen för replikatorn och tjänstslutpunkten. Eftersom båda dessa portar tilldelas vid körning av Service Fabric anges ContainerPort till noll för att använda den tilldelade porten för mappning.
<Policies> <ContainerHostPolicies CodePackageRef="Code"> <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/> <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/> </ContainerHostPolicies> </Policies>
Information om hur du konfigurerar containerisoleringsläge finns i Konfigurera isoleringsläge. Windows stöder två isoleringslägen för containrar: process och Hyper-V. Följande kodfragment visar hur isoleringsläget anges i programmanifestfilen.
<Policies> <ContainerHostPolicies CodePackageRef="Code" Isolation="process"> ... </ContainerHostPolicies> </Policies>
<Policies> <ContainerHostPolicies CodePackageRef="Code" Isolation="hyperv"> ... </ContainerHostPolicies> </Policies>
Kommentar
Ett Service Fabric-kluster är en enskild klientorganisation och värdbaserade program anses vara betrodda. Om du överväger att vara värd för ej betrodda containerprogram kan du överväga att distribuera dem som gästcontainrar och se Värd för ej betrodda program i ett Service Fabric-kluster.
För att testa det här programmet måste du distribuera det till ett kluster som kör version 5.7 eller senare. För körningsversion 6.1 eller senare måste du redigera och uppdatera klusterinställningarna för att aktivera den här förhandsgranskningsfunktionen. Följ stegen i den här artikeln för att lägga till inställningen som visas härnäst.
{ "name": "Hosting", "parameters": [ { "name": "FabricContainerAppsEnabled", "value": "true" } ] }
Distribuera sedan det redigerade programpaketet till det här klustret.
Nu bör du ha ett service fabric-program i containrar som kör klustret.
Nästa steg
- Mer information om hur du kör containrar i Service Fabric.
- Läs om Service Fabric-applivscykeln.