Docker üzembe helyezése
Tipp.
Még ha ismeri is a Dockert vagy Orleans, javasoljuk, hogy olvassa el ezt a cikket a végéig, hogy elkerülje a kerülő megoldásokkal kapcsolatos problémákat.
Ez a cikk és a minta egy folyamatban lévő munka. Bármilyen visszajelzést, pr-t vagy javaslatot szívesen fogadunk.
Megoldások üzembe helyezése Orleans a Dockerben
Orleans A Dockerben való üzembe helyezés bonyolult lehet, mivel a Docker-vezénylőket és a fürtözési vermeket úgy tervezték meg. A legbonyolultabb dolog a Docker Swarm és a Kubernetes hálózati modell átfedésmentes hálózatának fogalma.
A Docker-tárolók és a hálózati modellek többnyire állapot nélküli és nem módosítható tárolók futtatására lettek tervezve. Így a node.js vagy Nginx-alkalmazásokat futtató fürtök létrehozása meglehetősen egyszerű. Ha azonban valami összetettebbet próbál használni, például egy valódi fürtözött vagy elosztott alkalmazást (például Orleans-alapúakat), akkor végül problémába fog keveredni a beállításával. Lehetséges, de nem olyan egyszerű, mint a webes alkalmazások.
A Docker-fürtözés több gazdagép összevonásából áll, hogy egyetlen erőforráskészletként működjön, egy tárolóvezénylővel felügyelve. Docker Inc. adja meg a Swarmot a Container Orchestration lehetőségként, míg a Google a Kubernetes (más néven K8s) szolgáltatással rendelkezik. Vannak más vezénylők, mint a DC/OS, Mesos, de ebben a dokumentumban beszélünk Swarm és K8s, mivel szélesebb körben használják őket.
A docker-tárolókon is ugyanazok a szemcsés felületek és implementációk futnak, amelyek bárhol Orleans futnak. Az alkalmazás Docker-tárolókban való futtatásához nincs szükség különleges szempontokra.
Az itt tárgyalt fogalmak használhatóak a .NET Core és a .NET 4.6.1 típusú változatokon Orleans is, de a Docker és a .NET Core platformfüggetlen jellegének szemléltetéséhez a .NET Core használatát figyelembe véve a példára fogunk összpontosítani. Ebben a cikkben a platformspecifikus (Windows/Linux/OSX) részletek is megadhatók.
Előfeltételek
Ez a cikk feltételezi, hogy a következő előfeltételek vannak telepítve:
- Docker – A Docker4X könnyen használható telepítőt biztosít a főbb támogatott platformokhoz. Docker motort és Docker Swarmot is tartalmaz.
- Kubernetes (K8s) – A Google ajánlata a Container Orchestration-ra. Útmutatást tartalmaz a Minikube (A K8s helyi üzembe helyezése) és a kubectl telepítéséhez, valamint annak minden függőségéhez.
- .NET – A .NET platformfüggetlen íze
- Visual Studio Code (VSCode) – Tetszőleges IDE-t használhat. A VSCode platformfüggetlen, ezért arra használjuk, hogy minden platformon működjön. A VSCode telepítése után telepítse a C# bővítményt.
Fontos
Ha nem fogja használni, nem szükséges telepítenie a Kubernetes-t. A Docker4X telepítője már tartalmazza a Swarmot, így nincs szükség további telepítésre a használatához.
Feljegyzés
Windows rendszeren a Docker telepítője engedélyezi a Hyper-V-t a telepítési folyamat során. Mivel ez a cikk és a példák a .NET Core-t használják, a használt tárolólemezképek a Windows Server NanoServeren alapulnak. Ha nem tervezi a .NET Core használatát, és a .NET 4.6.1 teljes keretrendszerét célozza meg, a használt rendszerképnek a Windows Server Core-nak és az 1.4+-os verziónak kell lennie (amely csak a .NET teljes keretrendszerét Orleans támogatja).
Megoldás létrehozása – Orleans
Az alábbi utasítások bemutatják, hogyan hozhat létre normál Orleans megoldást az új dotnet
eszközkészlet használatával.
A parancsokat a platformon megfelelő módon módosítsa. A címtárstruktúra is csak javaslat. Kérjük, módosítsa az igényeinek megfelelően.
mkdir Orleans-Docker
cd Orleans-Docker
dotnet new sln
mkdir -p src/OrleansSilo
mkdir -p src/OrleansClient
mkdir -p src/OrleansGrains
mkdir -p src/OrleansGrainInterfaces
dotnet new console -o src/OrleansSilo --framework netcoreapp1.1
dotnet new console -o src/OrleansClient --framework netcoreapp1.1
dotnet new classlib -o src/OrleansGrains --framework netstandard1.5
dotnet new classlib -o src/OrleansGrainInterfaces --framework netstandard1.5
dotnet sln add src/OrleansSilo/OrleansSilo.csproj
dotnet sln add src/OrleansClient/OrleansClient.csproj
dotnet sln add src/OrleansGrains/OrleansGrains.csproj
dotnet sln add src/OrleansGrainInterfaces/OrleansGrainInterfaces.csproj
dotnet add src/OrleansClient/OrleansClient.csproj reference src/OrleansGrainInterfaces/OrleansGrainInterfaces.csproj
dotnet add src/OrleansSilo/OrleansSilo.csproj reference src/OrleansGrainInterfaces/OrleansGrainInterfaces.csproj
dotnet add src/OrleansGrains/OrleansGrains.csproj reference src/OrleansGrainInterfaces/OrleansGrainInterfaces.csproj
dotnet add src/OrleansSilo/OrleansSilo.csproj reference src/OrleansGrains/OrleansGrains.csproj
Eddig csak a megoldásstruktúra és a projektek létrehozásához használt sablonkódot használtuk, és referenciákat adtunk a projektek között. Semmi más, mint egy normál Orleans projekt.
Mire ez a cikk meg lett írva, Orleans a 2.0 (amely az egyetlen verzió, amely támogatja a .NET Core-t és a platformfüggetlen verziót) a Technology Preview-ban van, így NuGet-csomagjai myGet-csatornán futnak, és nem jelennek meg Nuget.org hivatalos hírcsatornában. Az előzetes verziójú NuGet-csomagok telepítéséhez parancssori felülettel dotnet
kényszerítjük ki a forráscsatornát és a MyGet-verziót:
dotnet add src/OrleansClient/OrleansClient.csproj package Microsoft.Orleans.Core -s https://dotnet.myget.org/F/orleans-prerelease/api/v3/index.json -v 2.0.0-preview2-201705020000
dotnet add src/OrleansGrainInterfaces/OrleansGrainInterfaces.csproj package Microsoft.Orleans.Core -s https://dotnet.myget.org/F/orleans-prerelease/api/v3/index.json -v 2.0.0-preview2-201705020000
dotnet add src/OrleansGrains/OrleansGrains.csproj package Microsoft.Orleans.Core -s https://dotnet.myget.org/F/orleans-prerelease/api/v3/index.json -v 2.0.0-preview2-201705020000
dotnet add src/OrleansSilo/OrleansSilo.csproj package Microsoft.Orleans.Core -s https://dotnet.myget.org/F/orleans-prerelease/api/v3/index.json -v 2.0.0-preview2-201705020000
dotnet add src/OrleansSilo/OrleansSilo.csproj package Microsoft.Orleans.OrleansRuntime -s https://dotnet.myget.org/F/orleans-prerelease/api/v3/index.json -v 2.0.0-preview2-201705020000
dotnet restore
Ok, most már rendelkezik az összes alapvető függőségével egy egyszerű Orleans alkalmazás futtatásához. Vegye figyelembe, hogy eddig semmi sem változott a szokásos Orleans alkalmazástól. Most adjunk hozzá néhány kódot, hogy valamit el tudjunk vele végezni.
Az Orleans alkalmazás implementálása
Tegyük fel, hogy a VSCode-ot használja, a megoldáskönyvtárból futtassa a következőtcode .
: . Ez megnyitja a könyvtárat a VSCode-ban, és betölti a megoldást.
Ez a korábban létrehozott megoldásstruktúra.
Emellett Program.cs, OrleansHostWrapper.cs, IGreetingGrain.cs és GreetingGrain.cs fájlokat adtunk hozzá az interfészekhez és a szemcsés projektekhez, és az alábbi fájlok kódja található:
IGreetingGrain.cs:
using System;
using System.Threading.Tasks;
using Orleans;
namespace OrleansGrainInterfaces
{
public interface IGreetingGrain : IGrainWithGuidKey
{
Task<string> SayHello(string name);
}
}
GreetingGrain.cs:
using System;
using System.Threading.Tasks;
using OrleansGrainInterfaces;
namespace OrleansGrains
{
public class GreetingGrain : Grain, IGreetingGrain
{
public Task<string> SayHello(string name)
{
return Task.FromResult($"Hello from Orleans, {name}");
}
}
}
OrleansHostWrapper.cs:
using System;
using System.NET;
using Orleans.Runtime;
using Orleans.Runtime.Configuration;
using Orleans.Runtime.Host;
namespace OrleansSilo;
public class OrleansHostWrapper
{
private readonly SiloHost _siloHost;
public OrleansHostWrapper(ClusterConfiguration config)
{
_siloHost = new SiloHost(Dns.GetHostName(), config);
_siloHost.LoadOrleansConfig();
}
public int Run()
{
if (_siloHost is null)
{
return 1;
}
try
{
_siloHost.InitializeOrleansSilo();
if (_siloHost.StartOrleansSilo())
{
Console.WriteLine(
$"Successfully started Orleans silo '{_siloHost.Name}' as a {_siloHost.Type} node.");
return 0;
}
else
{
throw new OrleansException(
$"Failed to start Orleans silo '{_siloHost.Name}' as a {_siloHost.Type} node.");
}
}
catch (Exception exc)
{
_siloHost.ReportStartupError(exc);
Console.Error.WriteLine(exc);
return 1;
}
}
public int Stop()
{
if (_siloHost is not null)
{
try
{
_siloHost.StopOrleansSilo();
_siloHost.Dispose();
Console.WriteLine($"Orleans silo '{_siloHost.Name}' shutdown.");
}
catch (Exception exc)
{
siloHost.ReportStartupError(exc);
Console.Error.WriteLine(exc);
return 1;
}
}
return 0;
}
}
Program.cs (Siló):
using System;
using System.Collections.Generic;
using System.Linq;
using System.NET;
using System.Threading.Tasks;
using Orleans.Runtime.Configuration;
namespace OrleansSilo
{
public class Program
{
private static OrleansHostWrapper s_hostWrapper;
static async Task<int> Main(string[] args)
{
int exitCode = await InitializeOrleansAsync();
Console.WriteLine("Press Enter to terminate...");
Console.ReadLine();
exitCode += ShutdownSilo();
return exitCode;
}
private static int InitializeOrleansAsync()
{
var config = new ClusterConfiguration();
config.Globals.DataConnectionString =
"[AZURE STORAGE CONNECTION STRING HERE]";
config.Globals.DeploymentId = "Orleans-Docker";
config.Globals.LivenessType =
GlobalConfiguration.LivenessProviderType.AzureTable;
config.Globals.ReminderServiceType =
GlobalConfiguration.ReminderServiceProviderType.AzureTable;
config.Defaults.PropagateActivityId = true;
config.Defaults.ProxyGatewayEndpoint =
new IPEndPoint(IPAddress.Any, 10400);
config.Defaults.Port = 10300;
var ips = await Dns.GetHostAddressesAsync(Dns.GetHostName());
config.Defaults.HostNameOrIPAddress =
ips.FirstOrDefault()?.ToString();
s_hostWrapper = new OrleansHostWrapper(config);
return hostWrapper.Run();
}
static int ShutdownSilo() =>
s_hostWrapper?.Stop() ?? 0;
}
}
Program.cs (ügyfél):
using System;
using System.NET;
using System.Threading;
using System.Threading.Tasks;
using Orleans;
using Orleans.Runtime.Configuration;
using OrleansGrainInterfaces;
namespace OrleansClient
{
class Program
{
private static IClusterClient s_client;
private static bool s_running;
static async Task Main(string[] args)
{
await InitializeOrleansAsync();
Console.ReadLine();
s_running = false;
}
static async Task InitializeOrleansAsync()
{
var config = new ClientConfiguration
{
DeploymentId = "Orleans-Docker";
PropagateActivityId = true;
};
var hostEntry =
await Dns.GetHostEntryAsync("orleans-silo");
var ip = hostEntry.AddressList[0];
config.Gateways.Add(new IPEndPoint(ip, 10400));
Console.WriteLine("Initializing...");
using client = new ClientBuilder().UseConfiguration(config).Build();
await client.Connect();
s_running = true;
Console.WriteLine("Initialized!");
var grain = client.GetGrain<IGreetingGrain>(Guid.Empty);
while (s_running)
{
var response = await grain.SayHello("Gutemberg");
Console.WriteLine($"[{DateTime.UtcNow}] - {response}");
await Task.Delay(1000);
}
}
}
}
Itt nem részletezzük a gabona implementálását, mivel ez a cikk hatókörén kívül esik. Ellenőrizze az ezzel kapcsolatos egyéb dokumentumokat. Ezek a fájlok lényegében egy minimális Orleans alkalmazás, és mi kezdjük belőle, hogy továbblépjen a többi ebben a cikkben.
Ebben a cikkben tagságszolgáltatót használunk OrleansAzureUtils
, de bármely más, már Orleanstámogatottat használhat.
A Dockerfile
A tároló létrehozásához a Docker képeket használ. A saját létrehozás módjával kapcsolatos további részletekért tekintse meg a Docker dokumentációját. Ebben a cikkben hivatalos Microsoft-rendszerképeket fogunk használni. A cél- és fejlesztési platformok alapján ki kell választania a megfelelő rendszerképet. Ebben a cikkben egy Linux-alapú rendszerképet használunk microsoft/dotnet:1.1.2-sdk
. microsoft/dotnet:1.1.2-sdk-nanoserver
Használhatja például a Windowst. Válasszon egyet, amely megfelel az igényeinek.
Megjegyzés a Windows-felhasználók számára: Ahogy korábban említettük, platformfüggetlenként ebben a cikkben a .NET Core és Orleans a Technical Preview 2.0-t használjuk. Ha windowsos Dockert szeretne használni a teljesen kiadott Orleans 1.4+-os verzióval, a Windows Server Core-on alapuló lemezképeket kell használnia, mivel a NanoServer és a Linux-alapú rendszerképek csak a .NET Core-t támogatják.
Dockerfile.debug:
FROM microsoft/dotnet:1.1.2-sdk
ENV NUGET_XMLDOC_MODE skip
WORKDIR /vsdbg
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
unzip \
&& rm -rf /var/lib/apt/lists/* \
&& curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /vsdbg
WORKDIR /app
ENTRYPOINT ["tail", "-f", "/dev/null"]
Ez a Dockerfile lényegében letölti és telepíti a VSdbg hibakeresőt, és elindít egy üres tárolót, örökre életben tartja, így nem kell lebontanunk/felszakítani a hibakeresés során.
Éles környezetben a rendszerkép kisebb, mivel csak a .NET Core-futtatókörnyezetet tartalmazza, a teljes SDK-t nem, a dockerfile pedig egy kicsit egyszerűbb:
Dockerfile:
FROM microsoft/dotnet:1.1.2-runtime
WORKDIR /app
ENTRYPOINT ["dotnet", "OrleansSilo.dll"]
COPY . /app
A docker-compose fájl
A docker-compose.yml
fájl lényegében (egy projekten belül) egy szolgáltatáskészletet és annak függőségeit definiálja szolgáltatási szinten. Minden szolgáltatás egy vagy több példányt tartalmaz egy adott tárolóból, amely a Dockerfile-on kiválasztott rendszerképeken alapul. További részletek a docker-compose
docker-compose dokumentációjában találhatók.
Üzembe helyezés esetén Orleans gyakori használati eset, docker-compose.yml
ha két szolgáltatást tartalmaz. Az egyik Silónak Orleans , a másik az ügyfélnek Orleans . Az ügyfélnek függősége lenne a silótól, és ez azt jelenti, hogy csak a Silo szolgáltatás üzembe helyezését követően indul el. Egy másik eset egy tároló-/adatbázis-szolgáltatás/tároló hozzáadása, például az SQL Server, amelynek először az ügyfél és a siló előtt kell kezdődnie, így mindkét szolgáltatásnak függőséget kell vállalnia rajta.
Feljegyzés
Mielőtt tovább olvasana, vegye figyelembe, hogy a behúzás a fájlokban docker-compose
fontos. Ezért figyeljen rá, ha bármilyen problémája van.
A cikk szolgáltatásaink leírása az alábbiak szerint történik:
docker-compose.override.yml (Hibakeresés):
version: '3.1'
services:
orleans-client:
image: orleans-client:debug
build:
context: ./src/OrleansClient/bin/PublishOutput/
dockerfile: Dockerfile.Debug
volumes:
- ./src/OrleansClient/bin/PublishOutput/:/app
- ~/.nuget/packages:/root/.nuget/packages:ro
depends_on:
- orleans-silo
orleans-silo:
image: orleans-silo:debug
build:
context: ./src/OrleansSilo/bin/PublishOutput/
dockerfile: Dockerfile.Debug
volumes:
- ./src/OrleansSilo/bin/PublishOutput/:/app
- ~/.nuget/packages:/root/.nuget/packages:ro
docker-compose.yml (éles):
version: '3.1'
services:
orleans-client:
image: orleans-client
depends_on:
- orleans-silo
orleans-silo:
image: orleans-silo
Éles környezetben nem képezzük le a helyi könyvtárat, és a művelet sem.build:
Ennek az az oka, hogy éles környezetben a rendszerképeket saját Docker-beállításjegyzékbe kell létrehozni és leküldni.
Mindent összehozni
Most már rendelkezünk az alkalmazás futtatásához Orleans szükséges összes mozgó alkatrészünkkel, össze fogjuk állítani, hogy a megoldást a Dockerben (Végül!) futtathassuk Orleans .
Fontos
A következő parancsokat a megoldáskönyvtárból kell végrehajtani.
Először is győződjön meg arról, hogy minden NuGet-csomagot visszaállítunk a megoldásból. Csak egyszer kell megtennie. Csak akkor kell újra elvégeznie, ha módosítja a projekt csomagfüggőségeit.
dotnet restore
Most hozzuk létre a megoldást a parancssori felülettel dotnet
a szokásos módon, és tegyük közzé egy kimeneti könyvtárban:
dotnet publish -o ./bin/PublishOutput
Tipp.
Itt használjuk publish
a buildelés helyett, hogy elkerüljük a dinamikusan betöltött szerelvényekkel kapcsolatos problémákat.Orleans Még mindig jobb megoldást keresünk rá.
A létrehozott és közzétett alkalmazással létre kell készítenie a Dockerfile-rendszerképeket. Ezt a lépést projektenként csak egyszer kell végrehajtani, és csak a Docker-fájl, a Docker-compose módosítása vagy a helyi lemezkép-beállításjegyzék bármilyen okból történő törlése esetén szabad újra végrehajtani.
docker-compose build
A rendszer lekérte és gyorsítótárazza a fejlesztési gépen az összes, mindkettőben Dockerfile
docker-compose.yml
használt rendszerképet. A rendszerképek elkészültek, és mindegyik futtatásra van állítva.
Most futtassuk!
# docker-compose up -d
Creating network "orleansdocker_default" with the default driver
Creating orleansdocker_orleans-silo_1 ...
Creating orleansdocker_orleans-silo_1 ... done
Creating orleansdocker_orleans-client_1 ...
Creating orleansdocker_orleans-client_1 ... done
#
Most, ha futtat egy docker-compose ps
, akkor 2 tároló fog futni a orleansdocker
projekthez:
# docker-compose ps
Name Command State Ports
------------------------------------------------------------------
orleansdocker_orleans-client_1 tail -f /dev/null Up
orleansdocker_orleans-silo_1 tail -f /dev/null Up
Feljegyzés
Ha Windows rendszeren dolgozik, és a tároló egy Windows rendszerképet használ alapként, a Parancs oszlopban megjelenik a PowerShell relatív parancsa egy tail
*NIX-rendszerekhez, így a tároló ugyanúgy fog tartani.
Most, hogy fel vannak állítva a tárolók, nem kell leállítania minden alkalommal, amikor el szeretné indítani az Orleans alkalmazást. Mindössze integrálnia kell az IDE-t az alkalmazás hibakereséséhez a tárolóban, amely korábban a saját tárolójában docker-compose.yml
volt leképezve.
Méretezés
Miután futtatta a komponálási projektet, egyszerűen fel- vagy leskálázhatja az alkalmazást a parancs használatával docker-compose scale
:
# docker-compose scale orleans-silo=15
Starting orleansdocker_orleans-silo_1 ... done
Creating orleansdocker_orleans-silo_2 ...
Creating orleansdocker_orleans-silo_3 ...
Creating orleansdocker_orleans-silo_4 ...
Creating orleansdocker_orleans-silo_5 ...
Creating orleansdocker_orleans-silo_6 ...
Creating orleansdocker_orleans-silo_7 ...
Creating orleansdocker_orleans-silo_8 ...
Creating orleansdocker_orleans-silo_9 ...
Creating orleansdocker_orleans-silo_10 ...
Creating orleansdocker_orleans-silo_11 ...
Creating orleansdocker_orleans-silo_12 ...
Creating orleansdocker_orleans-silo_13 ...
Creating orleansdocker_orleans-silo_14 ...
Creating orleansdocker_orleans-silo_15 ...
Creating orleansdocker_orleans-silo_6
Creating orleansdocker_orleans-silo_5
Creating orleansdocker_orleans-silo_3
Creating orleansdocker_orleans-silo_2
Creating orleansdocker_orleans-silo_4
Creating orleansdocker_orleans-silo_9
Creating orleansdocker_orleans-silo_7
Creating orleansdocker_orleans-silo_8
Creating orleansdocker_orleans-silo_10
Creating orleansdocker_orleans-silo_11
Creating orleansdocker_orleans-silo_15
Creating orleansdocker_orleans-silo_12
Creating orleansdocker_orleans-silo_14
Creating orleansdocker_orleans-silo_13
Néhány másodperc elteltével a szolgáltatások a kért példányok adott számára lesznek skálázva.
# docker-compose ps
Name Command State Ports
------------------------------------------------------------------
orleansdocker_orleans-client_1 tail -f /dev/null Up
orleansdocker_orleans-silo_1 tail -f /dev/null Up
orleansdocker_orleans-silo_10 tail -f /dev/null Up
orleansdocker_orleans-silo_11 tail -f /dev/null Up
orleansdocker_orleans-silo_12 tail -f /dev/null Up
orleansdocker_orleans-silo_13 tail -f /dev/null Up
orleansdocker_orleans-silo_14 tail -f /dev/null Up
orleansdocker_orleans-silo_15 tail -f /dev/null Up
orleansdocker_orleans-silo_2 tail -f /dev/null Up
orleansdocker_orleans-silo_3 tail -f /dev/null Up
orleansdocker_orleans-silo_4 tail -f /dev/null Up
orleansdocker_orleans-silo_5 tail -f /dev/null Up
orleansdocker_orleans-silo_6 tail -f /dev/null Up
orleansdocker_orleans-silo_7 tail -f /dev/null Up
orleansdocker_orleans-silo_8 tail -f /dev/null Up
orleansdocker_orleans-silo_9 tail -f /dev/null Up
Fontos
A Command
példák oszlopa csak azért jeleníti meg a tail
parancsot, mert a hibakereső tárolót használjuk. Ha éles környezetben lenne, az például jelenne meg dotnet OrleansSilo.dll
.
Docker swarm
A Docker-fürtözési verem neve Swarm, további információ: Docker Swarm.
A cikk fürtben Swarm
való futtatásához nincs további munkája. Amikor egy Swarm
csomóponton futdocker-compose up -d
, az a konfigurált szabályok alapján ütemezi a tárolókat. Ugyanez vonatkozik más Swarm-alapú szolgáltatásokra is, például az Azure ACS-re (Swarm módban) és az AWS ECS Container Service-re. Mindössze annyit kell tennie, hogy üzembe helyezi a fürtöt Swarm
a dockerizedOrleans alkalmazás üzembe helyezése előtt.
Feljegyzés
Ha olyan Docker-motort használ, amely már támogatja a ( és v3) compose
verziótstack
, deploy
akkor a megoldás üzembe helyezésének jobb módja az .docker stack deploy -c docker-compose.yml <name>
Ne feledje, hogy a Docker-motor támogatásához v3-írási fájl szükséges, és az olyan üzemeltetett szolgáltatások többsége, mint az Azure és az AWS, továbbra is v2 és régebbi motorokat használ.
Google Kubernetes (K8s)
Ha a Kubernetes-et szeretné üzemeltetniOrleans, a Contrib\Orleans-ben Orleanselérhető egy közösség által fenntartott fürtszolgáltató. Clustering.Kubernetes. Itt dokumentációt és mintákat találhat arról, hogyan üzemeltethet Orleans zökkenőmentesen a Kubernetesben a szolgáltató használatával.
Tárolókon belüli hibakeresés Orleans
Most, hogy már tudja, hogyan futtathat Orleans egy tárolóban az alapoktól kezdve, jó, ha a Docker egyik legfontosabb alapelvét használja. A tárolók nem módosíthatók. És (majdnem) ugyanazzal a képpel, függőségekkel és futtatókörnyezetekkel kell rendelkezniük a fejlesztés során, mint az éles környezetben. Ez biztosítja a jó régi utasítást : "Működik a gépemen!" soha többé nem fordul elő. Ahhoz, hogy ez lehetséges legyen, rendelkeznie kell egy olyan módszerrel, amellyel fejleszthet a tárolón belül , és ebbe beletartozik egy hibakereső csatlakoztatása az alkalmazáshoz a tárolón belül.
Ezt többféleképpen is el lehet érni több eszközzel. Kiértékelése után több, mire írtam ezt a cikket, végül úgy döntöttem, hogy egy úgy néz ki, egyszerűbb, és kevésbé tolakodó az alkalmazásban.
Ahogy a cikk korábbi részében említettük, a mintát a következőképpen fejlesztjük VSCode
ki, így az alábbiakban megtudhatja, hogyan csatolhatja a hibakeresőt az Orleans alkalmazáshoz a tárolóban.
Először módosítsa a címtárban lévő .vscode
két fájlt a megoldásban:
tasks.json:
{
"version": "0.1.0",
"command": "dotnet",
"isShellCommand": true,
"args": [],
"tasks": [
{
"taskName": "publish",
"args": [
"${workspaceRoot}/Orleans-Docker.sln", "-c", "Debug", "-o", "./bin/PublishOutput"
],
"isBuildCommand": true,
"problemMatcher": "$msCompile"
}
]
}
Ez a fájl lényegében azt jelzi VSCode
, hogy a projekt létrehozásakor a publish
korábban manuálisan végrehajtott parancsot fogja végrehajtani.
launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Silo",
"type": "coreclr",
"request": "launch",
"cwd": "/app",
"program": "/app/OrleansSilo.dll",
"sourceFileMap": {
"/app": "${workspaceRoot}/src/OrleansSilo"
},
"pipeTransport": {
"debuggerPath": "/vsdbg/vsdbg",
"pipeProgram": "/bin/bash",
"pipeCwd": "${workspaceRoot}",
"pipeArgs": [
"-c",
"docker exec -i orleansdocker_orleans-silo_1 /vsdbg/vsdbg --interpreter=vscode"
]
}
},
{
"name": "Client",
"type": "coreclr",
"request": "launch",
"cwd": "/app",
"program": "/app/OrleansClient.dll",
"sourceFileMap": {
"/app": "${workspaceRoot}/src/OrleansClient"
},
"pipeTransport": {
"debuggerPath": "/vsdbg/vsdbg",
"pipeProgram": "/bin/bash",
"pipeCwd": "${workspaceRoot}",
"pipeArgs": [
"-c",
"docker exec -i orleansdocker_orleans-client_1 /vsdbg/vsdbg --interpreter=vscode"
]
}
}
]
}
Most már egyszerűen létrehozhatja a megoldást ( VSCode
amely közzé fogja tenni), és elindíthatja a Silót és az ügyfelet is. Egy parancsot docker exec
küld a futó docker-compose
szolgáltatáspéldánynak/-tárolónak, hogy elindítsa a hibakeresőt az alkalmazásnak, és ennyi. A hibakereső csatlakoztatva van a tárolóhoz, és úgy használja, mintha helyileg futó Orleans alkalmazás lenne. A különbség most az, hogy a tárolón belül van, és ha végzett, egyszerűen közzéteheti a tárolót a beállításjegyzékben, és lekérheti a Docker-gazdagépeken éles környezetben.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: