İlginizi Çekebilir
  1. Ana Sayfa
  2. Server 2016
  3. Windows Server 2016 Üzerinde Windows Containers

Windows Server 2016 Üzerinde Windows Containers

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

Windows 10 PC’mizde üzerinden Process’lerine bakmak için get-Process *Docker* komutunu önce Linux Containers aktifken, sonra da ‘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 ü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: 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ı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda 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, ,

Yorum Yap

Yazar Hakkında

Mert Yeter, lisans eğitimini Yıldız Teknik Üniversitesi Gemi İnşaatı Mühendisliği bölümünde, yüksek lisans eğitimini ise Bahçeşehir Üniversitesi Bilgi Teknolojileri bölümü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. Şu anda da Done'de Cloud Development Manager olarak Azure, .NET Core, SQL Server, Docker vb güncel teknolojiler üzerinde çalışmaktadır.

Yorum Yap