Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La fonctionnalité de conteneur WSL comporte deux composants majeurs : une interface CLI appelée wslc.exe pour générer, exécuter et interagir avec des conteneurs Linux et une API de conteneur WSL permettant aux développeurs d’applications de Windows d’utiliser des conteneurs Linux dans le cadre de leur logique d’application.
Interface de ligne de commande (CLI) pour les conteneurs WSL
WSL inclut wslc.exe désormais en tant que binaire intégré. Son objectif est d’avoir une interface CLI familière, ce qui vous permet de générer, d’exécuter et d’interagir facilement avec des conteneurs Linux.
Consultez quelques-unes des exemples de commandes ci-dessous :
# 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
Vous pouvez en savoir plus sur la prise en main de cette fonctionnalité dans notre didacticiel sur les conteneurs.
API de conteneur WSL
Windows applications peuvent également utiliser des conteneurs Linux ! Le package NuGet de l’API de conteneur WSL vous permet d’extraire, d’exécuter et d’interagir par programmation avec des conteneurs Linux, notamment des interactions clés telles que stdin et stdout, des montages de fichiers, des montages réseau, un accès GPU et bien plus encore.
Pour obtenir la surface complète de l’API sur les projections C, C# et C++, consultez la référence de l’API de conteneur WSL.
Installer l’API
L’API conteneur WSL est fournie dans le Microsoft.WSL.Containers package NuGet, qui fournit à la fois la projection C# et les en-têtes C++/WinRT.
Ajoutez le package à votre projet avec l’interface CLI .NET :
dotnet add package Microsoft.WSL.Containers
Ensuite, importez l’espace de noms dans votre code :
using Microsoft.WSL.Containers;
Présentation de l’API
L’API est organisée autour d’un petit ensemble d’objets qui reflètent le cycle de vie de l’exécution d’un conteneur :
| Object | Description |
|---|---|
WslcService |
Point d’entrée statique pour les opérations au niveau du service. Utilisez-la pour vérifier que les composants WSL requis sont installés, interrogez la version du service et installez les dépendances manquantes. |
Session |
Hôte soutenu par WSL qui exécute vos conteneurs. Une session gère les images (extraction, importation, chargement, push, balise, suppression) et crée des conteneurs. |
Container |
Conteneur créé à l’intérieur d’une session. Utilisez-le pour démarrer, arrêter, inspecter et supprimer le conteneur et exécuter des processus supplémentaires à l’intérieur de celui-ci. |
Process |
Processus Linux s’exécutant dans un conteneur. Utilisez-le pour lire stdout/stderr, écrire dans stdin, envoyer des signaux et observer des codes de sortie par le biais d’événements. |
Un flux de travail typique est le suivant : vérifier les prérequis avec WslcService, créer et démarrer un Session, récupérer une image, configurer et créer un Container, puis le démarrer et interagir avec ses objets Process.
Exemples d’extraits de code
Les extraits de code ci-dessous montrent les mêmes blocs de construction principaux dans chaque langue prise en charge. Utilisez les onglets pour basculer entre C# et C++.
Vérifiez que les composants requis sont installés :
ComponentFlags missing = WslcService.GetMissingComponents();
if (missing != ComponentFlags.None)
{
Console.WriteLine($"WSL components are missing ({missing}). Run: wsl --install");
return;
}
Créez et démarrez une session :
var sessionSettings = new SessionSettings("MyApp", @"C:\WslcData")
{
CpuCount = 4,
MemoryMB = 4096
};
var session = new Session(sessionSettings);
session.Start();
Téléchargez une image avec indication de la progression :
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;
Créez un conteneur, exécutez une commande et lisez sa sortie :
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();
Lorsque vous avez terminé, arrêtez et supprimez le conteneur, puis terminez la session pour libérer des ressources :
container.Stop(Signal.SIGTERM, TimeSpan.FromSeconds(10));
container.Delete(DeleteContainerFlags.None);
session.Terminate();
Exemples complets de bout en bout
Les extraits de code ci-dessus montrent les blocs de construction principaux. Pour obtenir des exemples complets et exécutables qui couvrent le cycle de vie complet du conteneur, la gestion des images, les mappages de ports, les montages de volumes, l’accès GPU et la diffusion en continu interactive stdin/stdout , consultez les exemples d’API de conteneur WSL.
Windows Subsystem for Linux