Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Компонент контейнера WSL имеет два основных компонента: интерфейс командной строки, который вызывается wslc.exe для сборки, запуска и взаимодействия с контейнерами Linux и API контейнера WSL, позволяя разработчикам приложений Windows использовать контейнеры Linux в рамках логики приложения.
Интерфейс командной строки контейнеров WSL
WSL теперь включает в себя wslc.exe как встроенный двоичный файл. Его цель — иметь знакомый интерфейс командной строки, позволяющий легко создавать, запускать и взаимодействовать с контейнерами Linux.
См. некоторые из приведенных ниже примеров команд:
# 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
Дополнительные сведения о начале работы с этой функцией см. в руководстве по контейнерам.
API контейнеров WSL
Windows приложения также могут использовать контейнеры Linux! Пакет NuGet для API контейнеров WSL позволяет программно загружать, запускать контейнеры Linux и взаимодействовать с ними, включая такие важные возможности, как stdin и stdout, монтирование файловых систем, сетевое монтирование, доступ к GPU и многое другое.
Полный интерфейс API для проекций C, C#и C++ см. в справочнике по API контейнеров WSL.
Установка API
API контейнеров для WSL входит в состав пакета NuGet Microsoft.WSL.Containers, который предоставляет как проекцию для C#, так и заголовки C++/WinRT.
Добавьте пакет в проект с помощью интерфейса командной строки .NET:
dotnet add package Microsoft.WSL.Containers
Затем импортируйте пространство имен в вашем коде:
using Microsoft.WSL.Containers;
Обзор API
API организован вокруг небольшого набора объектов, которые отражают жизненный цикл запуска контейнера:
| Object | Description |
|---|---|
WslcService |
Статическая точка входа для операций на уровне службы. Используйте его, чтобы проверить, установлены ли необходимые компоненты WSL, запрашивать версию службы и устанавливать отсутствующие зависимости. |
Session |
Хост на базе WSL, на котором запускаются ваши контейнеры. Сеанс управляет изображениями (вытягиванием, импортом, загрузкой, отправкой, тегом, удалением) и создает контейнеры. |
Container |
Контейнер, созданный внутри сеанса. Используйте его для запуска, остановки, проверки и удаления контейнера, а также для выполнения дополнительных процессов внутри него. |
Process |
Процесс Linux, выполняющийся в контейнере. Используйте его для чтения stdout/stderr, записи в stdin, отправки сигналов и отслеживания кодов завершения через события. |
Типичный порядок действий: проверка предварительных требований с помощью WslcService, создание и запуск Session, загрузка образа, настройка и создание Container, а затем его запуск и взаимодействие с его объектами Process.
Примеры фрагментов
В приведенных ниже фрагментах показаны одни и те же основные стандартные блоки на каждом поддерживаемом языке. Используйте вкладки для переключения между C# и C++.
Убедитесь, что установлены необходимые компоненты:
ComponentFlags missing = WslcService.GetMissingComponents();
if (missing != ComponentFlags.None)
{
Console.WriteLine($"WSL components are missing ({missing}). Run: wsl --install");
return;
}
Создайте и запустите сеанс:
var sessionSettings = new SessionSettings("MyApp", @"C:\WslcData")
{
CpuCount = 4,
MemoryMB = 4096
};
var session = new Session(sessionSettings);
session.Start();
Загрузка образа с отображением хода выполнения:
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;
Создайте контейнер, выполните команду и прочитайте его выходные данные:
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();
По завершении остановите и удалите контейнер, а затем завершите сеанс, чтобы освободить ресурсы:
container.Stop(Signal.SIGTERM, TimeSpan.FromSeconds(10));
container.Delete(DeleteContainerFlags.None);
session.Terminate();
Полные комплексные примеры
Приведённые выше фрагменты показывают ключевые базовые компоненты. Полные готовые к запуску примеры, охватывающие весь жизненный цикл контейнера, управление образами, сопоставление портов, монтирование томов, доступ к GPU и интерактивную потоковую передачу stdin/stdout, см. в примерах API контейнеров WSL.
Windows Subsystem for Linux