Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La funzionalità contenitore WSL include due componenti principali: un'interfaccia della riga di comando chiamata wslc.exe per compilare, eseguire e interagire con i contenitori Linux e un'API contenitore WSL che consente agli sviluppatori di app di Windows di usare contenitori Linux come parte della logica dell'app.
Interfaccia della riga di comando del contenitore WSL
WSL ora include wslc.exe come binario integrato. L'obiettivo è avere un'interfaccia della riga di comando familiare, consentendo di compilare, eseguire e interagire facilmente con i contenitori Linux.
Vedere alcuni dei comandi di esempio seguenti:
# 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
Per altre informazioni su come iniziare a usare questa funzionalità, vedere l'esercitazione sui contenitori.
API del container WSL
Windows applicazioni possono usare anche contenitori Linux. Il pacchetto NuGet dell'API contenitore WSL consente di eseguire il pull, l'esecuzione e l'interazione con i contenitori Linux a livello di codice, incluse interazioni chiave come stdin e stdout, montaggi di file, montaggi di rete, accesso gpu e altro ancora.
Per il set completo di API per le proiezioni C, C# e C++, vedere la documentazione di riferimento dell'API del contenitore WSL.
Installare l'API
L'API contenitore WSL viene fornita nel Microsoft.WSL.Containers pacchetto NuGet, che fornisce sia la proiezione C# che le intestazioni C++/WinRT.
Aggiungere il pacchetto al progetto con l'interfaccia della riga di comando di .NET:
dotnet add package Microsoft.WSL.Containers
Importare quindi lo spazio dei nomi nel codice:
using Microsoft.WSL.Containers;
Panoramica delle API
L'API è organizzata intorno a un piccolo set di oggetti che rispecchiano il ciclo di vita dell'esecuzione di un contenitore:
| oggetto | Description |
|---|---|
WslcService |
Punto di ingresso statico per le operazioni a livello di servizio. Usarlo per verificare che i componenti WSL necessari siano installati, eseguire query sulla versione del servizio e installare dipendenze mancanti. |
Session |
Host supportato da WSL che esegue i contenitori. Una sessione gestisce le immagini (pull, importazione, caricamento, push, tag, eliminazione) e crea contenitori. |
Container |
Contenitore creato all'interno di una sessione. Usarlo per avviare, arrestare, esaminare ed eliminare il contenitore ed eseguire processi aggiuntivi al suo interno. |
Process |
Processo Linux in esecuzione in un contenitore. Usarlo per leggere stdout/stderr, scrivere in stdin, inviare segnali e osservare i codici di uscita tramite eventi. |
Un flusso tipico è: verificare i prerequisiti con WslcService, creare e avviare un'immagine Session, eseguire il pull di un'immagine, configurare e creare un Containeroggetto , quindi avviarlo e interagire con i relativi Process oggetti.
Frammenti di codice di esempio
I frammenti di codice seguenti mostrano gli stessi blocchi predefiniti di base in ogni linguaggio supportato. Usare le schede per passare da C# a C++.
Verificare che i componenti necessari siano installati:
ComponentFlags missing = WslcService.GetMissingComponents();
if (missing != ComponentFlags.None)
{
Console.WriteLine($"WSL components are missing ({missing}). Run: wsl --install");
return;
}
Creare e avviare una sessione:
var sessionSettings = new SessionSettings("MyApp", @"C:\WslcData")
{
CpuCount = 4,
MemoryMB = 4096
};
var session = new Session(sessionSettings);
session.Start();
Scaricare un'immagine con indicazione dell'avanzamento:
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;
Creare un contenitore, eseguire un comando e leggerne l'output:
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();
Una volta terminato, arrestare ed eliminare il contenitore, quindi terminare la sessione per liberare le risorse:
container.Stop(Signal.SIGTERM, TimeSpan.FromSeconds(10));
container.Delete(DeleteContainerFlags.None);
session.Terminate();
Esempi completi end-to-end
I frammenti di codice sopra mostrano gli elementi costitutivi fondamentali. Per esempi completi e eseguibili che illustrano il ciclo di vita completo del contenitore, la gestione delle immagini, i mapping delle porte, i montaggi dei volumi, l'accesso gpu e lo streaming interattivo stdin/stdout , vedere gli esempi di API contenitore WSL.
Windows Subsystem for Linux