Uw Reliable Services en Reliable Actors van Service Fabric in Windows in een container plaatsen
Service Fabric biedt ondersteuning voor het containeriseren van Service Fabric-microservices (Reliable Services en Reliable Actor-services). Zie Service Fabric-containers voor meer informatie.
Dit document bevat richtlijnen voor het uitvoeren van uw service in een Windows-container.
Notitie
Deze functie werkt momenteel alleen voor Windows. Als u containers wilt uitvoeren, moet het cluster worden uitgevoerd op Windows Server 2016 met containers.
Stappen voor het containeriseren van uw Service Fabric-toepassing
Open uw Service Fabric-toepassing in Visual Studio.
Voeg klasse-SFBinaryLoader.cs toe aan uw project. De code in deze klasse is een helper voor het correct laden van de binaire bestanden van de Service Fabric-runtime in uw toepassing wanneer deze in een container wordt uitgevoerd.
Voor elk codepakket dat u in een container wilt plaatsen, initialiseert u het laadprogramma op het programmainvoerpunt. Voeg de statische constructor toe die wordt weergegeven in het volgende codefragment aan het invoerpuntbestand van het 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() {
Bouw uw project en pak het in . Als u een pakket wilt maken en maken, klikt u met de rechtermuisknop op het toepassingsproject in Solution Explorer en kiest u de opdracht Pakket .
Voer voor elk codepakket dat u moet containeriseren het PowerShell-script CreateDockerPackage.ps1 uit. Het gebruik is als volgt:
Volledig .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
Met het script maakt u een map met Docker-artefacten op $dockerPackageOutputDirectoryPath. Wijzig het gegenereerde Dockerfile in
expose
alle poorten, voer installatiescripts enzovoort uit op basis van uw behoeften.Vervolgens moet u uw Docker-containerpakket bouwen en pushen naar uw opslagplaats.
Wijzig de ApplicationManifest.xml en ServiceManifest.xml om uw containerinstallatiekopie, opslagplaatsgegevens, registerverificatie en poort-naar-hosttoewijzing toe te voegen. Zie Een Azure Service Fabric-containertoepassing maken voor het wijzigen van de manifesten. De definitie van het codepakket in het servicemanifest moet worden vervangen door de bijbehorende containerinstallatiekopieën. Zorg ervoor dat u het EntryPoint wijzigt in een ContainerHost-type.
<!-- 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>
Voeg de poort-naar-hosttoewijzing toe voor uw replicator en service-eindpunt. Omdat beide poorten tijdens runtime door Service Fabric worden toegewezen, wordt containerport ingesteld op nul om de toegewezen poort te gebruiken voor toewijzing.
<Policies> <ContainerHostPolicies CodePackageRef="Code"> <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/> <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/> </ContainerHostPolicies> </Policies>
Zie De isolatiemodus voor containers configureren voor informatie over het configureren van de isolatiemodus. Windows ondersteunt twee isolatiemodi voor containers: proces en Hyper-V. De volgende fragmenten laten zien hoe de isolatiemodus is opgegeven in het manifestbestand van de toepassing.
<Policies> <ContainerHostPolicies CodePackageRef="Code" Isolation="process"> ... </ContainerHostPolicies> </Policies>
<Policies> <ContainerHostPolicies CodePackageRef="Code" Isolation="hyperv"> ... </ContainerHostPolicies> </Policies>
Notitie
Een Service Fabric-cluster is standaard één tenant en gehoste toepassingen worden beschouwd als vertrouwd. Als u overweegt om niet-vertrouwde containertoepassingen te hosten, kunt u overwegen deze als gastcontainers te implementeren en raadpleegt u Niet-vertrouwde toepassingen hosten in een Service Fabric-cluster.
Als u deze toepassing wilt testen, moet u deze implementeren in een cluster met versie 5.7 of hoger. Voor runtimeversie 6.1 of lager moet u de clusterinstellingen bewerken en bijwerken om deze preview-functie in te schakelen. Volg de stappen in dit artikel om de volgende instelling toe te voegen.
{ "name": "Hosting", "parameters": [ { "name": "FabricContainerAppsEnabled", "value": "true" } ] }
Implementeer vervolgens het bewerkte toepassingspakket in dit cluster.
U moet nu een Service Fabric-toepassing in een container hebben waarop uw cluster wordt uitgevoerd.
Volgende stappen
- Meer informatie over het uitvoeren van containers in Service Fabric.
- Meer informatie over de levenscyclus van de Service Fabric-toepassing.