0

Windows Server 2016 Üzerinde Windows Containers. Windows Containers Nedir? Nasıl Kullanılır? makalesinde Windows Container konusunu Windows 10 üzerinde ve Docker for Windows kullanarak incelemiştik. Windows Server 2016 üzerindeki kullanımına geçmeden Windows 10 üzerindeki çalışmasına detaylı olarak bakalım.

Windows 10 PC’mizde PowerShell üzerinden Docker Process’lerine bakmak için get-Process *Docker* komutunu önce Linux Containers aktifken, sonra da Windows Containers‘a geçtikten sonra çalıştıralım.


Resim-1: Windows 10 PowerShell get-Process *Docker* komut çıktısı

Resim-1‘de göreceğiniz gibi ilk komut (Linux Containers) ile 2. Komut (Windows Containers) arasında bir Process’lik fark var. Windows Containers aktifken Dockerd yani Docker Daemon Process’i de çalışıyor. Burada dikkat edeceğimiz Process ise com.Docker.proxy.

Resim-2′de görebileceğiniz gibi, Command Promt üzerinden çalıştırdığımız Docker run komutu ilk önce com.Docker.proxy’ye gider. Buradan eğer Linux Container ile çalışıyorsak Hyper-V üzerinde çalışan MobyLinux VM‘e ve içerisindeki L inux Container’ı, Windows Container ile çalışıyorsak da Docker Deamon (Dockerd.exe) üzerinden giderek Windows Container’ı çalıştırır.


Resim-2: Windows 10 Linux ve Windows Containers

Windows 10’un sunucudan çok son kullanıcıya yönelik bir işletim sistemi olduğundan üzerinde Docker ve Container kullanımı aslında geliştirme amaçlı olarak görülebilir. Peki sunucu tarafında Windows Container nasıl çalışıyor?

Windows Server’a Docker for Windows kurmuyoruz, böylece Resim-2‘deki com.Docker.proxy yerine komutları direkt olarak Docker daemon üzerinden ileterek Container’I çalıştırıyoruz.

Windows Server 2016 üzerinde yapmamız gereken kurulumlarla başlayalım:

1.PowerShell gallery’den Docker-Microsoft PackageManagement Provider‘ı kurmamız gerekiyor. PowerShell üzerinde aşağıdaki komutu çalıştıralım:

Install-Module
-Name DockerMsftProvider -Repository PSGallery -Force

2.PackageManagement PowerShell module kullanarak Docker’ın güncel versiyonunu aşağıdaki komut ile kuralım:

Install-Package
-Name Docker -ProviderName DockerMsftProvider

3.Restart

Restart-Computer
-Force

Sunucu üzerinde Docker komutunu çalıştırmadan önce Resim-3‘te göreceğiniz Disk Management ekranına bakalım. Disk 0 olarak bir adet diskimiz görünüyor.


Resim-3: Windows Server 2016 Disk Management

Docker run -it microsoft/dotnet:nanoserver PowerShell komutu ile microsoft/dotnet:nanoserver, interactive terminal (-it) parametresi ile Container içerisinde PowerShell’i açarak başlatalım.

NOT: Image önceden indirilmediği için önce image indirecektir.

Container içerisinde açtığımız PowerShell’de ls komutu ile disk içeriklerine bakalım (Resim-4). Aynı komutu Windows Server’da PowerShell’de de çalıştırdığımızda beklediğimiz gibi farklı içerikler yani farklı bir disk olduğunu görebiliyoruz (Resim-5).


Resim-4: Container PowerShell ls komutu


Resim-5: Windows Server 2016 PowerShell ls komutu

Resim-6‘te göreceğiniz gibi Disk 1 olarak yeni bir disk eklendi. Eğer Container’ı durdurursanız bu diskin sistemden kalkacağını görebilirsiniz. Özetle Container’ı çalıştırdığımız zaman sisteme yeni bir disk eklenmiş gibi farklı bir disk içerisinde çalışıyor.


Resim-6: Windows Server 2016 Disk Management (Docker run sonrası)

Disk içeriklerine baktıktan sonra Processlere de bakalım. Container içerisinde PowerShell üzerinden get-Process komutu ile aktif Process’lere bakalım. Resim-7‘te göreceğiniz gibi PowerShell Process id 4392 olarak görünüyor.


Resim-7: Container içerisinde get-Process komut çıktısı

Aynı komutu şimdi de Windows Server 2016 PowerShell’de çalıştıralım (bkz Resim-8). 3 farklı PowerShell Process görünüyor ve bunlardan birinin Process id’si de 4392.


Resim-8: Windows Server 2016 get-Process komut çıktısı

Container içerisindeki Process’i Windows Server 2016 üzerinde de görebildik. Bu nasıl oluyor diyerek Task Manager’ı açalım (Resim-9). Task Manager’a bir kolon olarak Job Object ID ekleyelim ve 4392 Process ID’li PowerShell’e baktığımızda 76 Job Object ID içerisindeki Process’lerin Resim-7‘te de göreceğiniz Container içerisindeki Processler olduğunu görebilirsiniz.


Resim-9: Windows Server 2016 Task Manager

Container’ı izole bir sistem olarak tanımlıyoruz ancak yukarıdaki örneklerden de göreceğiniz üzere disk ve Process’lere direkt erişebiliyoruz. Peki ben tümüyle izole bir Container çalıştırmak için ne yapmalıyım?

Windows Container tiplerine baktığımızda buraya kadar anlattığımız kısmına Windows Server Containers deniliyor. Process ve Namespace izolasyon teknolojisi kullanarak uygulama izolasyonu sağlıyor. Container Host ve Host üzerinde çalışan bütün Container’lar ile Kernel’ı paylaştığı için bu Container’lar aynı Kernel versiyonu ve konfigurasyonu gerektiriyor.

Diğer Windows Container tipi ise Hyper-V Isolation; her Container’ı optimize edilmiş bir sanal makina içerisinde çalıştırıyor. Böylece Container Host da Kernel’ı diğer Containerlar ile paylaşmamış oluyor ve yukarıda paylaştığım örnekteki gibi disk ve Processleri de Host üzerinden göremiyorsunuz.

Container’ı Hyper-V Isolation tipinde çalıştırmak için öncelikle Hyper-V özelliğini aktif hale getirmemiz gerekiyor. Bunun için PowerShell üzerinden Install-WindowsFeature Hyper-V komutunu çalıştırmamız yeterli.

NOT: Eğer örneği Hyper-V içerisine kurduğunuz bir Windows Server 2016 ile yapıyorsanız Nested Virtualization’ı aktif hale getirmek için Host üzerinden aşağıdaki komutu çalıştırmanız gerekiyor.

Set-VMProcessor
-VMName <VM adı> -ExposeVirtualizationExtensions $true

Hyper-V aktif hale geldikten sonra –isolation=hyperv parametresini ekleyerek Container’ı Hyper-V Isolation ile çalıştırabilirsiniz.

Docker run -it –isolation=hyperv microsoft/dotnet:nanoserver PowerShell

Artık Disk Manager üzerinde yeni bir disk ya da Task Manager’da Container’a ait Processler göremeyeceksiniz.

Container tipine karar Runtime sırasında verileceği için Container’I ihtiyaçlarınıza göre her 2 tipte de kullanabilirsiniz.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

https://docs.microsoft.com/en-us/virtualization/WindowsContainers/about/index

Getting Started with Docker on Windows, Wes Higbee

TAGs: Windows Containers, Container, Hyper-V, nanoserver, Docker, Windows Server 2016, PowerShell, Windows Server 2016 Üzerinde Windows Containers, server 2016 da containers,

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Mert Yeter, lisans eğitimini Yıldız Teknik Üniversitesi'nde, yüksek lisans eğitimini ise Bahçeşehir Üniversitesi'nde tamamlamıştır. Yazılım dünyasına üniversitenin ilk yıllarında aldığı QBasic ile başlayan Mert, .NET ve SQL Server gibi Microsoft teknolojileri ile devam etmiş; yüksek lisans tezini ise Linux konusunda yapmıştır. Netaş ve Ziraat Teknoloji gibi sektörün önde gelen firmalarında C#, .NET, SQL Server, Cisco Contact Center ürünleri ve Linux üzerine çalışmış, bir çok firmaya da bu konularda danışmanlık vermiştir.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir