Uw Reliable Services en Reliable Actors van Service Fabric in Windows in een container plaatsen
Service Fabric ondersteunt 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 in een container plaatsen 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 service fabric-runtimebestanden in uw toepassing wanneer deze wordt uitgevoerd in een container.
Voor elk codepakket dat u in een container wilt plaatsen, initialiseert u het laadprogramma op het ingangspunt van het programma. Voeg de statische constructor die wordt weergegeven in het volgende codefragment toe aan het bestand met het programmainvoerpunt.
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() {
Uw project bouwen en inpakken . 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 in een container wilt plaatsen het PowerShell-script uitCreateDockerPackage.ps1. Het gebruik is als volgt:
Volledige .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
Het script maakt een map met Docker-artefacten op $dockerPackageOutputDirectoryPath. Wijzig het gegenereerde Dockerfile in
expose
alle poorten, voer installatiescripts uit, enzovoort. op basis van uw behoeften.Vervolgens moet u uw Docker-containerpakket bouwen en naar uw opslagplaats pushen .
Wijzig de ApplicationManifest.xml en ServiceManifest.xml om uw containerinstallatiekopie, opslagplaatsgegevens, registerverificatie en toewijzing van poort naar host toe te voegen. Zie Een Azure Service Fabric-containertoepassing maken voor het wijzigen van de manifesten. De codepakketdefinitie 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-host-toewijzing toe voor uw replicator en service-eindpunt. Omdat beide poorten tijdens runtime door Service Fabric worden toegewezen, is de 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 Isolatiemodus configureren voor informatie over het configureren van de modus voor containerisolatie. Windows ondersteunt twee isolatiemodi voor containers: proces en Hyper-V. De volgende codefragmenten laten zien hoe de isolatiemodus wordt 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 als vertrouwd beschouwd. Als u overweegt niet-vertrouwde containertoepassingen te hosten, kunt u deze implementeren als gastcontainers 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 hebt nu een Service Fabric-toepassing in een container 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.