Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das WSL-Containerfeature verfügt über zwei Hauptkomponenten: eine CLI wslc.exe zum Erstellen, Ausführen und Interagieren mit Linux-Containern und einer WSL-Container-API, die es Windows App-Entwicklern ermöglicht, Linux-Container als Teil ihrer App-Logik zu verwenden.
WSL-Container-Befehlszeilenschnittstelle
WSL enthält wslc.exe jetzt als integrierte Binärdatei. Ziel ist es, eine vertraute CLI-Schnittstelle zu haben, mit der Sie problemlos Linux-Container erstellen, ausführen und interagieren können.
Sehen Sie sich einige der folgenden Beispielbefehle an:
# 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
Weitere Informationen zu den ersten Schritten mit diesem Feature finden Sie in unserem Container-Lernprogramm.
WSL-Container-API
Windows Anwendungen können auch Linux-Container nutzen! Mit dem WSL-Container-API-NuGet-Paket können Sie Linux-Container programmgesteuert abrufen, ausführen und mit ihnen interagieren, einschließlich wichtiger Interaktionen wie stdin und stdout, Dateibereitstellungen, Netzwerkbereitstellungen, GPU-Zugriff und mehr.
Die vollständige API-Oberfläche für die C-, C#- und C++-Projektionen finden Sie in der WSL-Container-API-Referenz.
Installieren der API
Die WSL-Container-API wird im Microsoft.WSL.Containers NuGet-Paket bereitgestellt, das sowohl die C#-Projektion als auch die C++/WinRT-Header bereitstellt.
Fügen Sie das Paket mit der .NET CLI zu Ihrem Projekt hinzu:
dotnet add package Microsoft.WSL.Containers
Importieren Sie dann den Namespace in Ihrem Code:
using Microsoft.WSL.Containers;
API-Übersicht
Die API ist um eine kleine Gruppe von Objekten organisiert, die den Lebenszyklus der Ausführung eines Containers spiegeln:
| Object | Description |
|---|---|
WslcService |
Statischer Einstiegspunkt für Vorgänge auf Dienstebene. Verwenden Sie sie, um zu überprüfen, ob die erforderlichen WSL-Komponenten installiert sind, die Dienstversion abfragen und fehlende Abhängigkeiten installieren. |
Session |
Ein WSL-basierter Host, auf dem Ihre Container ausgeführt werden. Eine Sitzung verwaltet Bilder (Pull, Import, Load, Push, Tag, Delete) und erstellt Container. |
Container |
Ein Container, der in einer Sitzung erstellt wurde. Verwenden Sie sie, um den Container zu starten, zu beenden, zu prüfen und zu löschen, und um weitere Prozesse darin auszuführen. |
Process |
Ein Linux-Prozess, der in einem Container ausgeführt wird. Damit können Sie stdout/stderr lesen, in stdin schreiben, Signale senden und Exit-Codes über Ereignisse beobachten. |
Ein typischer Ablauf ist: Überprüfen Sie die Voraussetzungen mit WslcService, erstellen und starten Sie ein Session, rufen Sie ein Image ab, konfigurieren und erstellen Sie ein Container, starten Sie es und interagieren Sie mit seinen Process-Objekten.
Beispielausschnitte
Die folgenden Codeausschnitte zeigen die gleichen Kernbausteine in jeder unterstützten Sprache. Verwenden Sie die Registerkarten, um zwischen C# und C++ zu wechseln.
Überprüfen Sie, ob die erforderlichen Komponenten installiert sind:
ComponentFlags missing = WslcService.GetMissingComponents();
if (missing != ComponentFlags.None)
{
Console.WriteLine($"WSL components are missing ({missing}). Run: wsl --install");
return;
}
Erstellen und Starten einer Sitzung:
var sessionSettings = new SessionSettings("MyApp", @"C:\WslcData")
{
CpuCount = 4,
MemoryMB = 4096
};
var session = new Session(sessionSettings);
session.Start();
Ein Image mit Fortschrittsanzeige herunterladen:
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;
Erstellen Sie einen Container, führen Sie einen Befehl aus, und lesen Sie dessen Ausgabe:
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();
Wenn Sie fertig sind, beenden und löschen Sie den Container und beenden Sie anschließend die Sitzung, um Ressourcen freizugeben:
container.Stop(Signal.SIGTERM, TimeSpan.FromSeconds(10));
container.Delete(DeleteContainerFlags.None);
session.Terminate();
Vollständige End-to-End-Beispiele
Die obigen Codeausschnitte zeigen die kernen Bausteine. Vollständige, runnable Beispiele, die den vollständigen Containerlebenszyklus, die Imageverwaltung, Portzuordnungen, Volume mounts, GPU-Zugriff und interaktives stdin/stdout Streaming abdecken, finden Sie in den Beispielen der WSL-Container-API.
Windows Subsystem for Linux