Windows'da kapsayıcı platformu araçları

Windows kapsayıcı platformu genişliyor! Kapsayıcı yolculuğunun ilk parçası Docker'dı, şimdi de diğer kapsayıcı platformu araçlarını oluşturuyoruz.

Bu makalede Windows ve Linux kapsayıcı platformunun yanı sıra her kapsayıcı platformu aracı hakkında da bilgi verilecektir.

Windows ve Linux kapsayıcı platformu

Linux ortamlarında, Docker gibi kapsayıcı yönetim araçları daha ayrıntılı bir kapsayıcı araçları kümesi üzerinde oluşturulur: runc ve containerd.

Linux'ta Docker mimarisi

runc, OCI kapsayıcı çalışma zamanı belirtimine göre, kapsayıcılar oluşturmaya ve çalıştırmaya yönelik bir Linux komut satırı aracıdır.

containerd, kapsayıcı görüntüsünü indirip açmaktan kapsayıcı yürütme ve denetime kadar kapsayıcı yaşam döngüsünü yöneten bir daemon'dır.

Windows'ta farklı bir yaklaşım benimsedik. Windows kapsayıcılarını desteklemek için Docker ile çalışmaya başladığımızda, doğrudan HCS (Konak İşlem Hizmeti) üzerine inşa ettik. Bu blog gönderisi, HCS'yi neden oluşturduğumuz ve başlangıçta kapsayıcılara neden bu yaklaşımı benimsediğimiz hakkında bilgilerle doludur.

Windows'da İlk Docker Engine mimarisi

Bu noktada Docker yine de doğrudan HCS'ye çağrı yapar. Ancak bundan sonra, Windows kapsayıcılarını ve Windows kapsayıcı konaklarını içerecek şekilde genişletilen kapsayıcı yönetimi araçları, containerd ve runhcs'yi Linux üzerindeki containerd ve runc'de çağırdıkları şekilde çağırabilir.

runhcs

runhcs, runc'in çatallanmasıdır. runcgibi runhcs de Open Container Initiative (OCI) biçimine göre paketlenmiş uygulamaları çalıştırmak için kullanılan bir komut satırı istemcisidir ve Open Container Initiative belirtiminin uyumlu bir uygulamasıdır.

Runc ve runhc'ler arasındaki işlevsel farklar şunlardır:

  • runhcs Windows üzerinde çalışır. Kapsayıcı oluşturmak ve yönetmek için HCS ile iletişim kurar.

  • runhcs çeşitli kapsayıcı türlerini çalıştırabilir.

    • Windows ve Linux Hyper-V yalıtım
    • Windows işlem kapsayıcıları (kapsayıcı görüntüsü kapsayıcı konağıyla eşleşmelidir)

Kullanımı:

runhcs run [ -b bundle ] <container-id>

<container-id>, başlatmakta olduğunuz kapsayıcı örneğinin adınızdır. Konaklayıcı sunucunuzda adın benzersiz olması gerekir.

Paket dizini (-b bundlekullanılarak) isteğe bağlıdır. Runc'de olduğu gibi kapsayıcılar da paketler kullanılarak yapılandırılır. Bir kapsayıcının paketi, kapsayıcının OCI belirtimini içeren dizindir, "config.json". "Paket" için varsayılan değer geçerli dizindir.

"config.json" OCI belirtim dosyasının doğru çalışması için iki alan olması gerekir:

  • Kapsayıcının karalama alanına giden yol
  • Kapsayıcının katman dizinine giden yol

Runhc'lerde kullanılabilen kapsayıcı komutları şunlardır:

  • Kapsayıcı oluşturma ve çalıştırma araçları

    • bir kapsayıcı oluşturur ve çalıştırır
    • oluştur kapsayıcı oluştur
  • Kapsayıcıda çalışan işlemleri yönetme araçları:

    • başlatma oluşturulan kapsayıcıda kullanıcı tanımlı işlemi yürütür
    • exec kapsayıcı içinde yeni bir işlem çalıştırır
    • duraklat duraklatma kapsayıcı içindeki tüm işlemleri askıya alır
    • sürdür daha önce duraklatılmış olan tüm işlemleri sürdürür
    • ps ps kapsayıcı içinde çalışan işlemleri görüntüler
  • Kapsayıcının durumunu yönetme araçları

    • durumu bir kapsayıcının durumunu çıkarır
    • sonlandırma belirtilen sinyali (varsayılan: SIGTERM) kapsayıcının başlatma işlemine gönderir
    • sil genellikle ayrık kapsayıcıda kullanılan kapsayıcı tarafından tutulan tüm kaynakları siler

Birden çok kapsayıcı olarak kabul edilebilecek tek komut, listesidir. Verilen kökle runhcs tarafından başlatılan çalışan veya duraklatılmış kapsayıcılar listelenir.

HCS

HCS ile arabirim sağlamak için GitHub'da iki sarmalayıcımız var. HCS bir C API'si olduğundan, sarmalayıcılar HCS'yi daha üst düzey dillerden çağırmayı kolaylaştırır.

  • hcsshim - HCSShim Go dilinde yazılır ve runhc'lerin temelini oluşturur. AppVeyor'dan en son sürümü alın veya kendiniz derleyin.
  • dotnet-computevirtualization - dotnet-computevirtualization, HCS için bir C# sarmalayıcısıdır.

HCS'yi kullanmak istiyorsanız (doğrudan veya sarmalayıcı aracılığıyla) veya HCS çevresinde Rust/Haskell/InsertYourLanguage sarmalayıcı yapmak istiyorsanız, lütfen bir açıklama bırakın.

HCS'ye daha ayrıntılı bir bakış için John Stark'ın DockerCon sunusunun izleyin.

containerd/cri

Önemli

CRI desteği yalnızca Windows Server 2019/Windows 10 1809 ve sonraki sürümlerde kullanılabilir.

OCI belirtimleri tek bir kapsayıcı tanımlasa da CRI (kapsayıcı çalışma zamanı arabirimi), kapsayıcıları, pod denilen paylaşılan korumalı alan ortamlarında iş yükleri olarak tanımlar. Podlar, bir veya daha fazla kapsayıcı iş yükü içerebilir. Podlar, Kubernetes ve Service Fabric Mesh gibi kapsayıcı düzenleyicilerinin bellek ve vNET gibi bazı paylaşılan kaynaklarla aynı konakta olması gereken gruplandırılmış iş yüklerini işlemesine olanak tanır.

RunHCS ve containerd her ikisi de herhangi bir Windows sistemi Server 2016 veya daha yenisinde yönetilebilirken, Pod'ları desteklemek Windows'taki kapsayıcı araçlarında köklü değişiklikler yapılmasını gerektiriyordu. CRI desteği Windows Server 2019/Windows 10 1809 ve sonraki sürümlerde kullanılabilir.