Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O recurso de contêiner do WSL tem dois componentes principais: uma CLI chamada wslc.exe para compilar, executar e interagir com contêineres do Linux e uma API de contêiner WSL, permitindo que Windows desenvolvedores de aplicativos usem contêineres do Linux como parte de sua lógica de aplicativo.
CLI de contêiner do WSL
O WSL agora inclui wslc.exe como um binário interno. Sua meta é ter uma interface familiar da CLI, permitindo que você crie, execute e interaja facilmente com contêineres do 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
Você pode saber mais sobre como começar a usar esse recurso em nosso tutorial de contêiner.
API de contêiner do WSL
Windows aplicativos também podem usar contêineres do Linux! O pacote NuGet da API de contêiner do WSL permite baixar, executar e interagir programaticamente com contêineres Linux, incluindo interações importantes como stdin e stdout, montagens de arquivos, montagens de rede, acesso à GPU e muito mais.
Para obter a superfície de API completa entre as projeções C, C#e C++, consulte a referência da API de contêiner do WSL.
Instalar a API
A API de contêineres do WSL é distribuída no pacote NuGet Microsoft.WSL.Containers, que inclui tanto a projeção para C# quanto os arquivos de cabeçalho do C++/WinRT.
Adicione o pacote ao seu projeto com a CLI do .NET:
dotnet add package Microsoft.WSL.Containers
Em seguida, importe o namespace em seu código:
using Microsoft.WSL.Containers;
Visão geral da API
A API é organizada em torno de um pequeno conjunto de objetos que espelham o ciclo de vida da execução de um contêiner:
| Objeto | Description |
|---|---|
WslcService |
Ponto de entrada estático para operações de nível de serviço. Use-o para verificar se os componentes WSL necessários estão instalados, consultar a versão do serviço e instalar dependências ausentes. |
Session |
Um host com suporte WSL que executa seus contêineres. Uma sessão gerencia imagens (pull, importação, carregamento, push, marca, exclusão) e cria contêineres. |
Container |
Um contêiner criado dentro de uma sessão. Use-o para iniciar, parar, inspecionar e excluir o contêiner e executar processos adicionais dentro dele. |
Process |
Um processo do Linux em execução em um contêiner. Use-o para ler stdout/stderr, escrever em stdin, enviar sinais e monitorar os códigos de saída por meio de eventos. |
Um fluxo típico é: verificar os pré-requisitos com WslcService, criar e iniciar um Session, baixar uma imagem, configurar e criar um Container, e então iniciá-lo e interagir com seus objetos Process.
Trechos de exemplo
Os snippets abaixo mostram os mesmos blocos de construção principais em cada idioma com suporte. Use as guias para alternar 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();
Baixar uma imagem com indicação de 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 contêiner, execute um comando e leia 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 terminar, interrompa e exclua o contêiner e encerre a sessão para liberar recursos:
container.Stop(Signal.SIGTERM, TimeSpan.FromSeconds(10));
container.Delete(DeleteContainerFlags.None);
session.Terminate();
Exemplos completos de ponta a ponta
Os snippets acima mostram os blocos de construção principais. Para obter exemplos completos e executáveis que abrangem o ciclo de vida completo do contêiner, o gerenciamento de imagens, os mapeamentos de porta, as montagens de volume, o acesso à GPU e o streaming interativo stdin/stdout , consulte os exemplos de API de contêiner do WSL.
Windows Subsystem for Linux