Kontejnerizace služeb Reliable Actors a Reliable Services služby Service Fabric ve Windows
Service Fabric podporuje kontejnerizaci mikroslužeb Service Fabric (Reliable Services a reliable actor). Další informace najdete v tématu Kontejnery Service Fabric.
Tento dokument obsahuje pokyny k tomu, aby vaše služba běžela v kontejneru Windows.
Poznámka:
V současné době tato funkce funguje jenom pro Windows. Aby bylo možné spouštět kontejnery, musí cluster běžet ve Windows Serveru 2016 s kontejnery.
Postup kontejnerizace aplikace Service Fabric
Otevřete aplikaci Service Fabric v sadě Visual Studio.
Přidejte do projektu SFBinaryLoader.cs třídy. Kód v této třídě je pomocná rutina pro správné načtení binárních souborů modulu runtime Service Fabric uvnitř vaší aplikace při spuštění uvnitř kontejneru.
Pro každý balíček kódu, který chcete kontejnerizovat, inicializujte zavaděč v vstupním bodu programu. Přidejte statický konstruktor zobrazený v následujícím fragmentu kódu do souboru vstupního bodu programu.
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() {
Sestavte a zabalte projekt. Chcete-li sestavit a vytvořit balíček, klikněte pravým tlačítkem myši na projekt aplikace v Průzkumník řešení a zvolte příkaz Balíček.
Pro každý balíček kódu, který potřebujete kontejnerizovat, spusťte skript PowerShellu CreateDockerPackage.ps1. Použití je následující:
Úplná .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
Skript vytvoří složku s artefakty Dockeru na $dockerPackageOutputDirectoryPath. Upravte vygenerovaný soubor Dockerfile na
expose
libovolné porty, spusťte instalační skripty atd. na základě vašich potřeb.Dále je potřeba sestavit a odeslat balíček kontejneru Dockeru do úložiště.
Upravte ApplicationManifest.xml a ServiceManifest.xml tak, aby se přidala image kontejneru, informace o úložišti, ověřování registru a mapování portů na hostitele. Informace o úpravách manifestů najdete v tématu Vytvoření aplikace kontejneru Azure Service Fabric. Definice balíčku kódu v manifestu služby musí být nahrazena odpovídající imagí kontejneru. Nezapomeňte změnit EntryPoint na typ 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>
Přidejte mapování portu na hostitele pro replikátor a koncový bod služby. Vzhledem k tomu, že Service Fabric přiřazuje oba tyto porty za běhu, je ContainerPort nastaven na nulu, aby se k mapování použil přiřazený port.
<Policies> <ContainerHostPolicies CodePackageRef="Code"> <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/> <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/> </ContainerHostPolicies> </Policies>
Informace o konfiguraci režimu izolace kontejneru naleznete v tématu Konfigurace režimu izolace. Systém Windows podporuje pro kontejnery dva režimy izolace: procesy a Hyper-V. Následující fragmenty kódu ukazují, jak je režim izolace zadaný v souboru manifestu aplikace.
<Policies> <ContainerHostPolicies CodePackageRef="Code" Isolation="process"> ... </ContainerHostPolicies> </Policies>
<Policies> <ContainerHostPolicies CodePackageRef="Code" Isolation="hyperv"> ... </ContainerHostPolicies> </Policies>
Poznámka:
Cluster Service Fabric je jedním tenantem podle návrhu a hostované aplikace jsou považovány za důvěryhodné. Pokud uvažujete o hostování nedůvěryhodných kontejnerových aplikací, zvažte jejich nasazení jako kontejnery hostů a projděte si téma Hostování nedůvěryhodných aplikací v clusteru Service Fabric.
Pokud chcete tuto aplikaci otestovat, musíte ji nasadit do clusteru, na kterém běží verze 5.7 nebo vyšší. Pro modul runtime verze 6.1 nebo nižší je potřeba upravit a aktualizovat nastavení clusteru, aby se tato funkce Preview povolila. Podle kroků v tomto článku přidejte další nastavení.
{ "name": "Hosting", "parameters": [ { "name": "FabricContainerAppsEnabled", "value": "true" } ] }
Dále nasaďte upravený balíček aplikace do tohoto clusteru.
Teď byste měli mít kontejnerizovanou aplikaci Service Fabric, na které běží váš cluster.
Další kroky
- Další informace o spouštění kontejnerů v Service Fabric.
- Informace o životním cyklu aplikace Service Fabric.