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.
Importante
La funzionalità contenitore WSL richiede WSL versione 2.9.3 o successiva. Questa versione è attualmente disponibile solo come versione non definitiva, quindi è necessario installarla aprendo PowerShell e immettendo:
wsl --update --pre-release
Controllare la versione installata in qualsiasi momento con wsl --version.
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