Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A funcionalidade do contentor WSL tem dois componentes principais: uma CLI chamada wslc.exe para construir, executar e interagir com contentores Linux e uma API de contentores WSL que permite aos programadores de aplicações Windows usar contentores Linux como parte da lógica da sua aplicação.
Importante
A funcionalidade do contentor WSL requer a versão WSL 2.9.3 ou superior. Para atualizar para a versão mais recente, abra o PowerShell e introduza:
wsl --update
Verifique a sua versão instalada a qualquer momento com wsl --version.
CLI de contentores do WSL
O WSL inclui wslc.exe agora como um binário incorporado. O seu objetivo é ter uma interface CLI familiar, permitindo-lhe construir, executar e interagir facilmente com contentores Linux.
Veja alguns dos comandos de exemplo abaixo:
# 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
Pode saber mais sobre como começar com esta funcionalidade no nosso tutorial de contentores.
Para configurar recursos e outras opções para wslc.exe, como contagem de CPU, memória e localização de armazenamento, consulte as definições do contentor WSL.
API de contentores WSL
As aplicações Windows também podem utilizar contentores Linux! O pacote NuGet da API de contentores WSL permite-lhe puxar, executar e interagir programaticamente com containers Linux, incluindo interações chave como stdin e stdout, montagens de ficheiros, montagens de rede, acesso à GPU e mais.
Para a superfície completa da API nas projeções de C, C# e C++, consulte a referência da API do contentor WSL.
Instalar a API
A API de contentores WSL é incluída no Microsoft.WSL.Containers pacote NuGet, que fornece tanto a projeção C# como os cabeçalhos C++/WinRT.
Adicione o pacote ao seu projeto com a CLI .NET:
dotnet add package Microsoft.WSL.Containers
Depois importa o namespace no teu código:
using Microsoft.WSL.Containers;
Visão geral da API
A API está organizada em torno de um pequeno conjunto de objetos que espelham o ciclo de vida da execução de um contentor:
| Objeto | Description |
|---|---|
WslcService |
Ponto de entrada estático para operações de nível de serviço. Utilize-o para verificar se os componentes WSL necessários estão instalados, consultar a versão do serviço e instalar dependências em falta. |
Session |
Um host apoiado por WSL que executa os teus containers. Uma sessão gere imagens (puxar, importar, carregar, empurrar, etiquetar, eliminar) e cria contentores. |
Container |
Um contentor criado dentro de uma sessão. Use-o para iniciar, parar, inspecionar e eliminar o contentor, e para executar processos adicionais dentro dele. |
Process |
Um processo Linux a correr num contentor. Use-o para ler stdout/stderr, escrever para stdin, enviar sinais e observar códigos de saída através de eventos. |
Um fluxo típico é: verificar os pré-requisitos com WslcService, criar e iniciar um Session, obter uma imagem, configurar e criar um Container, depois iniciá-lo e interagir com os respetivos objetos Process.
Exemplos de excertos
Os excertos abaixo mostram os mesmos blocos de construção essenciais em cada linguagem suportada. Utiliza os separadores para mudar entre C# e C++.
Verifique se os componentes necessários estão instalados:
ComponentFlags missing = WslcService.GetMissingComponents();
if (missing != ComponentFlags.None)
{
Console.WriteLine($"WSL components are missing ({missing}). Run: wsl --install");
return;
}
Crie e inicie uma sessão:
var sessionSettings = new SessionSettings("MyApp", @"C:\WslcData")
{
CpuCount = 4,
MemoryMB = 4096
};
var session = new Session(sessionSettings);
session.Start();
Obtenha uma imagem com indicação do progresso:
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;
Crie um contentor, execute um comando e leia a sua saída:
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();
Quando terminares, para e apaga o contentor, depois termina a sessão para libertar recursos:
container.Stop(Signal.SIGTERM, TimeSpan.FromSeconds(10));
container.Delete(DeleteContainerFlags.None);
session.Terminate();
Exemplos completos de ponta a ponta
Os excertos acima mostram os blocos de construção essenciais. Para exemplos completos e executáveis que abrangem todo o ciclo de vida do contentor, gestão de imagens, mapeamentos de portas, montagens de volume, acesso à GPU e streaming interativo stdin/stdout , consulte os exemplos da API do contentor WSL.
Windows Subsystem for Linux