Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
WSL kapsayıcısı özelliğinin iki ana bileşeni vardır: Linux kapsayıcıları oluşturmak, çalıştırmak ve bunlarla etkileşim kurmak için çağrılan wslc.exe bir CLI ve Windows uygulama geliştiricilerinin uygulama mantığının bir parçası olarak Linux kapsayıcılarını kullanmasına olanak sağlayan bir WSL kapsayıcı API'si.
WSL kapsayıcı CLI'sı
WSL artık wslc.exe öğesini yerleşik bir ikili dosya olarak içeriyor. Amacı, Linux kapsayıcılarını kolayca oluşturmanıza, çalıştırmanıza ve bunlarla etkileşim kurmanıza olanak sağlayan tanıdık bir CLI arabirimine sahip olmaktır.
Aşağıdaki örnek komutlardan bazılarını inceleyin:
# 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
Kapsayıcı öğreticimizde bu özelliği kullanmaya başlama hakkında daha fazla bilgi edinebilirsiniz.
WSL kapsayıcı API'si
Windows uygulamaları da Linux kapsayıcılarını kullanabilir! WSL kapsayıcı API'si NuGet paketi, stdin ve stdout, dosya bağlamaları, ağ bağlamaları, GPU erişimi ve daha fazlası gibi önemli etkileşimler de dahil olmak üzere Linux kapsayıcılarını program aracılığıyla çekmenizi, çalıştırmanızı ve bunlarla etkileşim kurmanızı sağlar.
C, C# ve C++ projeksiyonlarında tam API yüzeyi için bkz. WSL kapsayıcı API'si başvurusu.
API'yi yükleme
WSL kapsayıcı API'si, hem C# projeksiyonunu Microsoft.WSL.Containers hem de C++/WinRT üst bilgilerini sağlayan NuGet paketinde sunulur.
paketi .NET CLI ile projenize ekleyin:
dotnet add package Microsoft.WSL.Containers
Ardından kodunuzda ad alanını içeri aktarın:
using Microsoft.WSL.Containers;
API’ye genel bakış
API, bir kapsayıcının çalışma yaşam döngüsünü yansıtan küçük bir nesne kümesi etrafında yapılandırılmıştır:
| Nesne | Description |
|---|---|
WslcService |
Hizmet düzeyi işlemleri için statik giriş noktası. Gerekli WSL bileşenlerinin yüklü olup olmadığını denetlemek, hizmet sürümünü sorgulamak ve eksik bağımlılıkları yüklemek için bunu kullanın. |
Session |
Kapsayıcılarınızı çalıştıran WSL destekli bir ana bilgisayar. Oturum görüntüleri yönetir (çekme, içeri aktarma, yükleme, gönderme, etiketleme, silme) ve kapsayıcılar oluşturur. |
Container |
Bir oturum içinde oluşturulan kapsayıcı. Kapsayıcıyı başlatmak, durdurmak, incelemek ve silmek ve içinde ek işlemler çalıştırmak için bunu kullanın. |
Process |
Kapsayıcıda çalışan bir Linux işlemi. Bunu stdout/stderr öğelerini okumak, stdin öğesine yazmak, sinyal göndermek ve olaylar aracılığıyla çıkış kodlarını gözlemlemek için kullanın. |
Tipik akış şöyledir: WslcService ile ön koşulları doğrulayın, bir Session oluşturup başlatın, bir görüntü çekin, bir Container yapılandırıp oluşturun, ardından onu başlatın ve Process nesneleriyle etkileşime geçin.
Örnek kod parçacıkları
Aşağıdaki kod parçacıkları desteklenen her dilde aynı temel yapı taşları gösterir. C# ile C++ arasında geçiş yapmak için sekmeleri kullanın.
Gerekli bileşenlerin yüklü olup olmadığını denetleyin:
ComponentFlags missing = WslcService.GetMissingComponents();
if (missing != ComponentFlags.None)
{
Console.WriteLine($"WSL components are missing ({missing}). Run: wsl --install");
return;
}
Oturum oluşturma ve başlatma:
var sessionSettings = new SessionSettings("MyApp", @"C:\WslcData")
{
CpuCount = 4,
MemoryMB = 4096
};
var session = new Session(sessionSettings);
session.Start();
İlerleme bildirimi içeren bir görüntü çekin:
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;
Kapsayıcı oluşturun, bir komut çalıştırın ve çıktısını okuyun:
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();
İşiniz bittiğinde kapsayıcıyı durdurun ve silin, ardından kaynakları serbest bırakmak için oturumu sonlandırın:
container.Stop(Signal.SIGTERM, TimeSpan.FromSeconds(10));
container.Delete(DeleteContainerFlags.None);
session.Terminate();
Tam uçtan uca örnekler
Yukarıdaki kod parçacıklarında temel yapı taşları gösterilmektedir. Tam kapsayıcı yaşam döngüsünü, görüntü yönetimini, bağlantı noktası eşlemelerini, birim bağlamalarını, GPU erişimini ve etkileşimli stdin/stdout akışı kapsayan eksiksiz, çalıştırılabilir örnekler için bkz. WSL kapsayıcı API'si örnekleri.
Windows Subsystem for Linux