Yalıtım Modları

Şunlar için geçerlidir: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016

Windows kapsayıcıları iki ayrı çalışma zamanı yalıtımı modu sunar: process ve Hyper-V yalıtımı. Her iki yalıtım modu altında çalışan kapsayıcılar aynı şekilde oluşturulur, yönetilir ve çalışır. Ayrıca, aynı kapsayıcı görüntüleri üretir ve tüketirler. Yalıtım modları arasındaki fark kapsayıcı, konak işletim sistemi ve bu konakta çalışan diğer tüm kapsayıcılar arasında ne derece yalıtım oluşturulduğudur.

İşlem Yalıtımı

Bu kapsayıcılar için "geleneksel" yalıtım modudur ve Windows kapsayıcılara genel bakış bölümünde açıklanan moddur. İşlem yalıtımıyla, birden çok kapsayıcı örneği ad alanı, kaynak denetimi ve diğer işlem yalıtım teknolojileri aracılığıyla sağlanan yalıtımla belirli bir konakta eşzamanlı olarak çalışır. Kapsayıcılar bu modda çalışırken hem ana bilgisayarla hem de birbirleriyle aynı işletim sistemi çekirdeğini paylaşır. Bu, Linux kapsayıcılarının çalışma şekliyle yaklaşık olarak aynıdır.

İşletim sisteminden ve donanımdan yalıtılan uygulamalarla dolu bir kapsayıcıyı gösteren diyagram.

Neler yalıtılır

Windows kapsayıcıları, çeşitli işletim sistemi ad alanlarına erişimi sanallaştırır. Ad alanı, bir ad aracılığıyla bilgilere, nesnelere veya kaynaklara erişim sağlar. Örneğin, dosya sistemi büyük olasılıkla en iyi bilinen ad alanıdır. Windows'ta kapsayıcı başına yalıtılmış çok sayıda ad alanı vardır:

  • dosya sistemi
  • Kayıt defteri
  • ağ bağlantı noktaları
  • işlem ve iş parçacığı kimliği alanı
  • Nesne Yöneticisi ad alanı

Yalıtım sınırının delinmesi

Yalıtım sınırını delmenin yararlı olduğu durumlar vardır. Bu işlemler kullanıcı tarafından kasıtlı olarak istenmelidir ve kapsayıcının güvenlik duruşunu tehlikeye atabileceği için dikkatli bir şekilde yapılmalıdır. Windows kapsayıcıları aşağıdakileri destekler:

Windows kapsayıcıları şu anda şu anda şu desteği desteklemiyor:

  • paylaşılan bellek
  • eşitleme nesnelerini paylaşma (semaforlar, mutexler vb.)
  • paylaşılan işlem ad alanları

Hyper-V yalıtımı

Bu yalıtım modu, konak ve kapsayıcı sürümleri arasında gelişmiş güvenlik ve daha geniş uyumluluk sunar. Hyper-V yalıtımıyla, birden çok kapsayıcı örneği bir ana bilgisayarda eşzamanlı olarak çalışır; ancak, her kapsayıcı yüksek düzeyde optimize edilmiş bir sanal makinenin içinde çalışır ve etkili bir şekilde kendi çekirdeğine sahip olur. Sanal makinenin varlığı, hem kapsayıcı konağı hem de her kapsayıcı arasında donanım düzeyinde yalıtım sağlar.

Fiziksel makinede bir işletim sistemi üzerinde çalışan sanal makinedeki bir işletim sistemi içinde izole edilmiş bir kapsayıcının diyagramı.

Yalıtım örnekleri

Kapsayıcı oluşturma

Hyper-V yalıtılmış kapsayıcılarını Docker ile yönetmek, işlemden yalıtılmış kapsayıcıları yönetmekle neredeyse aynıdır. Docker kullanarak Hyper-V yalıtımına sahip bir kapsayıcı oluşturmak için --isolationayarlamak için --isolation=hyperv parametresini kullanın.

docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 cmd

Docker aracılığıyla işlem yalıtımına sahip bir kapsayıcı oluşturmak için --isolationayarlamak için --isolation=process parametresini kullanın.

docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd

Windows Server'da çalışan Windows kapsayıcıları varsayılan olarak işlem yalıtımıyla çalışır. Windows 10 Pro ve Enterprise üzerinde çalışan Windows kapsayıcıları varsayılan olarak Hyper-V yalıtımla çalışır. Windows 10 Ekim 2018 güncelleştirmesiyle başlayarak, Windows 10 Pro veya Enterprise konağı çalıştıran kullanıcılar işlem yalıtımına sahip bir Windows kapsayıcısı çalıştırabilir. Kullanıcıların --isolation=process bayrağını kullanarak doğrudan işlem yalıtımı istemesi gerekir.

Uyarı

Windows 10 Pro ve Enterprise'da işlem yalıtımıyla çalışmak, geliştirme/test amaçlıdır. Ana bilgisayarınızın Windows 10 sürüm 17763+ derlemesini çalıştırıyor olması ve Docker Motoru sürüm 18.09 veya daha yenisine sahip olmanız gerekir.

Üretim dağıtımları için konak olarak Windows Server'ı kullanmaya devam etmelisiniz. Bu özelliği Windows 10 Pro ve Enterprise'da kullanarak konak ve kapsayıcı sürümü etiketlerinizin eşleştiğinden de emin olmanız gerekir; aksi takdirde kapsayıcı başlatılamaz veya tanımsız davranış sergilenemez.

Yalıtım açıklaması

Bu örnek, işlem ve Hyper-V yalıtım arasındaki yalıtım özellikleri arasındaki farkları gösterir.

Burada işlemden yalıtılmış bir kapsayıcı dağıtılıyor ve uzun süre çalışan bir ping işlemi barındıracak.

docker run -d mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t

docker top komutu kullanılarak, ping işlemi kapsayıcı içinde görüldüğü gibi döndürülür. Bu örnekteki işlemin kimliği 3964'tür.

docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a

3964 ping

Kapsayıcı konağında çalışan ping işlemlerini döndürmek için get-process komutu kullanılabilir. Bu örnekte bir tane vardır ve işlem kimliği kapsayıcıdaki kimlikle eşleşir. Hem kapsayıcı üzerinde hem de ana bilgisayarda aynı süreç görülebilir.

get-process -Name ping

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName
-------  ------    -----      ----- -----   ------     --  -- -----------
     67       5      820       3836 ...71     0.03   3964   3 PING

Buna karşılık, bu örnekte ayrıca bir ping işlemiyle Hyper-V yalıtılmış bir kapsayıcı başlatılır.

docker run -d --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t

Benzer şekilde, docker top kapsayıcıdan çalışan işlemleri döndürmek için kullanılabilir.

docker top 5d5611e38b31a41879d37a94468a1e11dc1086dcd009e2640d36023aa1663e62

1732 ping

Ancak, kapsayıcı konağında işlem aranırken bir ping işlemi bulunmaz ve bir hata oluşur.

get-process -Name ping

get-process : Cannot find a process with the name "ping". Verify the process name and call the cmdlet again.
At line:1 char:1
+ get-process -Name ping
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (ping:String) [Get-Process], ProcessCommandException
    + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand

Son olarak, host üzerinde çalışan sanal makine olan vmwp işlemi görünür, bu sanal makine, kapsayıcıyı devrede tutarak çalışan işlemleri konak işletim sisteminden korur.

get-process -Name vmwp

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName
-------  ------    -----      ----- -----   ------     --  -- -----------
   1737      15    39452      19620 ...61     5.55   2376   0 vmwp