Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A WSL-tárolószolgáltatás két fő összetevővel rendelkezik: a Linux-tárolók létrehozására, futtatására és kezelésére szolgáló wslc.exe parancssori felülettel, valamint egy WSL-tároló API-val, amely lehetővé teszi, hogy Windows alkalmazásfejlesztők Linux-tárolókat használjanak az alkalmazáslogika részeként.
Important
A WSL-tároló funkcióhoz a WSL 2.9.3-s vagy újabb verziója szükséges. Ez a verzió jelenleg csak előzetes kiadásként érhető el, ezért telepítenie kell a PowerShell megnyitásával és a következő beírásával:
wsl --update --pre-release
Ellenőrizze a telepített verziót bármikor a használatával wsl --version.
WSL-tároló parancssori felülete
A WSL mostantól beépített bináris fájlként is szerepel wslc.exe . A cél egy jól ismert CLI-felület használata, amely lehetővé teszi a Linux-tárolók egyszerű létrehozását, futtatását és használatát.
Tekintse meg az alábbi példaparancsokat:
# Run a container
wslc run --rm -it ubuntu:latest bash -c "echo Hello world from WSL container!"
# List available images
wslc image ls
# Run a web server
wslc run -it --rm -d -p 8080:80 --name web nginx
# Get its content
curl localhost:8080
# List the container
wslc container ps
# Stop the container
wslc container stop web
A szolgáltatás használatának megkezdéséről a tároló oktatóanyagában olvashat bővebben.
WSL-tároló API
Windows alkalmazások linuxos tárolókat is használhatnak! A WSL-tároló API NuGet-csomagja lehetővé teszi a Linux-tárolók programozott lekérését, futtatását és kezelését, beleértve az olyan kulcsfontosságú interakciókat, mint az stdin és az stdout, a fájlcsatlakozások, a hálózati csatlakoztatások, a GPU-hozzáférés stb.
A C, C# és C++ előrejelzések teljes API-felületét a WSL-tároló API-referenciája ismerteti.
Az API telepítése
A WSL container API a Microsoft.WSL.Containers NuGet-csomagban található, amely a C#-vetítést és a C++/WinRT fejléceket is biztosítja.
Adja hozzá a csomagot a projekthez a .NET parancssori felülettel:
dotnet add package Microsoft.WSL.Containers
Ezután importálja a névteret a kódba:
using Microsoft.WSL.Containers;
API – Áttekintés
Az API egy tároló futtatásának életciklusát tükröző kis objektumok köré van rendszerezve:
| Objektum | Leírás |
|---|---|
WslcService |
Statikus belépési pont szolgáltatásszintű műveletekhez. Ezzel ellenőrizheti, hogy telepítve vannak-e a szükséges WSL-összetevők, lekérdezheti a szolgáltatás verzióját, és telepítheti a hiányzó függőségeket. |
Session |
A tárolókat futtató, WSL-alapú gazdagép. A munkamenetek kezelik a lemezképeket (lekérés, importálás, betöltés, leküldés, címke, törlés) és tárolókat hoznak létre. |
Container |
Munkamenetben létrehozott tároló. Ezzel elindíthatja, leállíthatja, megvizsgálhatja és törölheti a tárolót, és további folyamatokat futtathat benne. |
Process |
Egy tárolóban futó Linux-folyamat. Segítségével olvashat a stdout/stderr elemekből, írhat ide: stdin, jeleket küldhet, és megfigyelheti a kilépési kódokat eseményeken keresztül. |
Egy tipikus folyamat a következő: az előfeltételek ellenőrzése a(z) WslcService segítségével, egy Session létrehozása és elindítása, egy lemezkép letöltése, egy Container konfigurálása és létrehozása, majd annak elindítása és a Process objektumaival való interakció.
Mintatöredékek
Az alábbi kódrészletek ugyanazokat az alapvető építőelemeket jelenítik meg minden támogatott nyelven. A lapfülekkel válthat a C# és a C++ között.
Ellenőrizze, hogy a szükséges összetevők telepítve vannak-e:
ComponentFlags missing = WslcService.GetMissingComponents();
if (missing != ComponentFlags.None)
{
Console.WriteLine($"WSL components are missing ({missing}). Run: wsl --install");
return;
}
Munkamenet létrehozása és indítása:
var sessionSettings = new SessionSettings("MyApp", @"C:\WslcData")
{
CpuCount = 4,
MemoryMB = 4096
};
var session = new Session(sessionSettings);
session.Start();
Kép lekérése folyamatjelentéssel:
var pull = session.PullImageAsync(new PullImageOptions("docker.io/library/alpine:latest"));
pull.Progress = (op, progress) =>
Console.WriteLine($"Pull: {progress.Status} {progress.CurrentBytes}/{progress.TotalBytes}");
await pull;
Hozzon létre egy tárolót, futtasson egy parancsot, és olvassa el a kimenetét:
var initProcess = new ProcessSettings
{
CmdLine = new[] { "/bin/echo", "Hello from WSL Container!" },
OutputMode = ProcessOutputMode.Event
};
var containerSettings = new ContainerSettings("alpine:latest")
{
Name = "hello-container",
InitProcess = initProcess
};
var container = session.CreateContainer(containerSettings);
container.InitProcess.OutputReceived += data =>
Console.Write(Encoding.UTF8.GetString(data));
container.Start();
Ha végzett, állítsa le és törölje a tárolót, majd állítsa le a munkamenetet az erőforrások felszabadításához:
container.Stop(Signal.SIGTERM, TimeSpan.FromSeconds(10));
container.Delete(DeleteContainerFlags.None);
session.Terminate();
Teljes körű minták
A fenti kódrészletek az alapvető építőelemeket mutatják. A teljes tároló-életciklust, képkezelést, portleképezéseket, kötetcsatlakozásokat, GPU-hozzáférést és interaktív stdin/stdout streamelést lefedő, futtatható példákért tekintse meg a WSL tároló API-mintáit.
Windows Subsystem for Linux