Windows Server

Windows Server 2016 Containers Bölüm 3 – Adım Adım Örnek Uygulamalarla Windows Server Containers

Windows Server 2016 ile gelen ve sanallaştırmada yeni bir dönemi başlatan “Container” mimarisini incelemeye devam ediyoruz. Serimizin ilk iki bölümünü henüz okumadıysanız aşağıdaki linklerden erişim sağlayabilirsiniz.

·        Windows Server 2016 Containers – Bölüm 1 – Giriş, Kavramlar ve Mimari

·        Windows Server 2016 Containers – Bölüm 2 – Windows Server Containers

Bu bölümde de Windows Server Container kullanımını adım adım örnek uygulamalarla ele alıyoruz.

Bundan önceki bölümlerde yapılandırdığımız Container Host sunucumuzla ilgili bilgileri aşağıdaki resimde de görüldüğü gibi Get-ContainerHost komutu ile görüntülüyoruz.

clip_image002

Container Host sunucumuzda oluşturacağımız container imajlarında kullanmak için baz işletim sistemi imajı (base OS image) olarak hazırladığımız imajları Get-ContainerImage komutu ile listeliyoruz:

clip_image004

Container imajı container oluşturmak için kullanılan bir şablon(template) ya da snapshot gibi tekrar tekrar kullanılabilen bileşenlerdir. Bu imajlar container host sunucusu üzerinde C:\ProgramData\Microsoft\Windows\Images konumunda aşağıda görüldüğü gibi dosya biçiminde depolanmaktadır.

clip_image006

 

 

 

YENİ BİR CONTAINER OLUŞTURMAK

Container Host sunucumuz üzerinde New-Container komutu kullanılarak Container1 adında aşağıdaki resimde de görüldüğü gibi yeni bir container oluşturuyoruz:

clip_image008

Oluşturulan container’a ait hangi özellikleri (property) ya da metodları kullanabileceğimizi de aşağıdaki resimde de görüldüğü gibi get-member komutunu kullanarak listeleyebilirsiniz.

clip_image010

Oluşturulan bir container’a ait sık kullanılan özellikleri listelemek gerekirse:

·       ContainerId : Container’a atanan benzersiz kimlik numarası.

·       ContainerName : Container’a atanan isim.

·       ComputerName : Container Host sunucu adı.

·       CreationTime : Container oluşturulma tarih ve saati.

·       ParentImage : Container’ın bağlı olduğu ana imaj ya da bir başka deyişle container şablon imajı.

·       State : Container’ın o anki durumunu gösterir. Kapalı (Off), çalışır durumda (Running) vb.

·       Uptime : Container’ın son açılışından itibaren erişilebilir olduğu toplam zaman.

CONTAINER BAŞLATMAK

Container Host sunucusu üzerinde oluşturulan container’ı başlatmak için Start-Container komutunu kullanıyoruz.clip_image012

Oluşturulan bir container’ın başlama ya da erişilebilir duruma gelme süresini sanal bir sunucunun başlama süresi ile karşılaştırdığımızda container’ın farkı ve sanal sunuculara olan üstünlüğünü net olarak görmekteyiz.

CONTAINER’A BAĞLANMAK

Container Host sunucusu üzerinde oluşturulan container’a bağlanmak için Enter-PSSession komutunu kullanıyoruz. Bağlantı gerçekleştirirken sunucu adı yerine Container adı (ContainerName) ya da ContainerID’sini aşağıdaki resimde de görüldüğü şekilde kullanıyoruz.

clip_image014

Container sistemine bağlandıktan sonra hostname komutunu kullanarak container’a atanan host adını görüntüleyebilirsiniz. Container içerisinde aşağıda görüldüğü gibi ufak bir değişiklik yaparak sistem bilgilerini bir metin dosyasına yazdıralım. 

clip_image016

Bu küçük değişiklik sonrasında Exit-PSSession komutu ile container oturumumuzu aşağıda görüldüğü gibi kapatıyoruz.

clip_image018

Çalışır durumda olan container’ı da Stop-Container komutunu kullanarak durduruyoruz.

clip_image020

Bu container’ı repository içerisinde yeni bir container imajı olarak saklamak için de New-ContainerImage komutunu aşağıdaki şekilde kullanılıyoruz:

clip_image022

ContainerImage1 adıyla repository içerisine yeni bir container imajı olarak kaydetmiş olduk. Böylece bu imaj tekrar tekrar kullanılarak yeni container’lar oluşturulabilecek. Oluşturduğumuz ContainerImage1 baz imajı olan “WindowsServerCore” isimli imaja bağlantılı olarak yeni bir imaj olarak oluşturuldu. Bu oluşan yeni imaj içerisinde sadece farklar bulunmaktadır. Yeni oluşturduğumuz container imajına ait içerik aşağıdaki şekilde de görülen C:\ProgramData\Microsoft\Windows\Hyper-V\Container Image Store\ altına kaydedilecektir.

clip_image024

Bu yeni oluşturduğumuz ContainerImage1 adlı container imajdan yeni container’lar oluşturmak için de aşağıdaki resimde de görüldüğü gibi New-Container komutunu kullanıyoruz:

clip_image026

NewContainer1 isimli yeni bir container oluşturduktan sonra Start-Container komutunu kullanarak container’ı başlatıyoruz.

Şimdi de Enter-PSSession komutunu kullanarak yeni oluşturduğumuz container’a aşağıdaki resimde görüldüğü gibi bağlandığımızda imaj içerisinde önceden oluşturduğumuz C:\systeminfo.txt dosyasının da geldiğini göreceksiniz. Bu bağlantımızı da ContainerID yerine ContainerName bilgisini kullandık.

clip_image028

Exit-PSSession komutunu kullanarak container oturumundan çıkıyoruz.

Çalışır durumda bulunan tüm container’ları kapatmak için de aşağıdaki resimde görüldüğü gibi Get-Container | Stop-Container komutunu kullanıyoruz:

clip_image030

CONTAINER’LARIN SİLİNMESİ

Container Host sunucusu üzerinde oluşturulan containerları silmek için Remove-Container komutunu aşağıdaki resimde görüldüğü gibi kullanabilirsiniz:

clip_image032

NOT: Container’ı silmeden önce Stop-Container komutu ile kapatmanız gerekir. Tüm açık containerları kapatmak için de Get-Container | Stop-Container komutunu kullanabilirsiniz.  

CONTAINER İMAJLARIN SİLİNMESİ

Container Host sunucusu üzerinde repository içerisine kaydedilen imajların silinmesi için de Remove-ContainerImage komutunu aşağıdaki resimde görüldüğü gibi kullanabilirsiniz:

clip_image034

CONTAINER İÇERİSİNDE WEB SUNUCULARIN HOST EDİLMESİ

Bu uygulamamızda da container içerisinden web site host edilmesini gerçekleştiriyoruz.

Öncelikle mevcut WindowsServerCore baz imajını kullanarak aşağıdaki şekilde de görüldüğü gibi WebContainer isimli yeni bir container oluşturuyoruz:

clip_image036

Oluşturduğumuz container’ı Start-Container komutunu kullanarak başlatıyoruz. Ve container’a PowerShell Remoting ile uzaktan aşağıdaki resimde de görüldüğü gibi oturumu başlatıyoruz:

clip_image038

Görüldüğü gibi yeni oluşturduğumuz container’ı NetworkName parametresi ile bir ağa da bağlayarak IP adresi atanmasını sağlamış olduk. Böylece container ortamına ContainerName, ContainerId ve IP Adresi bigilerini kullanarak oturum açabilirsiniz.

Container’ı bağladığımız ağ arabirimi NAT modunda çalıştığı için Container Host sunucusu üzerinde aşağıdaki resimde de görüldüğü gibi internet ağı ile haberleştiğini kontrol ediyoruz:clip_image040

Container içerisinden web site host edeceğimiz için aşağıdaki resimde de görüldüğü gibi Install-WindowsFeature Web-Server komutunu kullanarak web sunucu rolünü yüklüyoruz.clip_image042

Aynen bir sanal sunucuda olduğu gibi InetPub dizininin geldiğini göreceksiniz.

Dışardan container içerisindeki web sitelerine erişim için container host sunucusundan container’ın IP adresine giden web trafiği için aşağıdaki şekilde statik port yönlendirme tanımını yapılandırıyoruz:

clip_image044

Not : Container yapılarının dış dünya ile iletişimi için Network Address Translation (NAT) modunu kullanan bir sanal switch ile ilişkilendiriyoruz. Böylece container sunucumuza IP ataması yaparak, dış dünya ile de iletişimini sağlamış oluyoruz.

Bu adımdan sonra da container host sunucumuz üzerinde 80 portu için gelen trafiğe izin veren firewall kuralını aşağıdaki şekilde tanımlıyoruz:

clip_image046

Windows Firewall devre dışı bırakılmışsa bu kuralı oluşturmadan da ilerleyebilirsiniz. Artık tanımlarımızı yaptık. Şimdi container ortamına Microsoft Edge, IE vb. tarayıcılar üzerinde bağlandığımızda otomatik olarak bizi container üzerinde host edilen web sayfasına yönlendirdiğini göreceksiniz.

clip_image048

Windows Server üzerinde gelen Web Server rolü yerine Nginx gibi üçüncü parti web sunucu yazılımlarını da kullanarak container içerisinde web hosting yapabilirsiniz. Bunun için öncelikle aşağıdaki resimde görüldüğü gibi nginx paketini container içerisinde C sürücüsüne indiriyoruz.

clip_image050

Expand-Archive komutunu ile aşağıdaki resimde de görüldüğü gibi sıkıştırılmış ZIP içeriğini açıyoruz:

clip_image052

Container oturumunu ve container’ı tamamen kapatıyoruz.

clip_image054

Bu container’ı aşağıdaki resimde de görüldüğü gibi New-ContainerImage komutu kullanılarak bir container imajına dönüştürüyoruz.

clip_image056

Yukarıdaki resimde görüldüğü gibi nginxweb adında yeni bir container imaj olarak yerel repository içerisine kaydettik.

Şimdi de bu imajı kullanarak yeni bir container oluşturacağız.

 

clip_image058

Oluşturulan websrv1 isimli container’ı başlatıp, uzak oturum açıyoruz.

clip_image060

Öncelikle container içerisinde web sunucu hizmetini verecek Nginx web sunucu servisini aşağıdaki komutla başlatıyoruz.

clip_image062

Container’a atanan ip bilgisini öğrendikten sonra Exit-PSSession ile powershell oturumunu kapatıyoruz.

clip_image064

Container host sunucumuza dışardan gelen HTTP (TCP 80 port) isteklerini websrv1 isimli container ip adresine yönlendirecek şekilde host üzerinde port yönlendirmesi tanımlıyoruz. clip_image066

Windows Firewall etkin durumda ise yine aşağıdaki komutu çalıştırarak TCP 80 portundan gelen trafik için izin veren kuralımızı etkinleştiriyoruz:

clip_image068

Bu yapılandırmalardan sonra Container Host sunucumuzun IP adresine web tarayıcı üzerinden bağlandığımızda nginx üzerinde host edilen sayfaya yönlendirildiğinizi ve içeriğin geldiğini göreceksiniz.

clip_image070

Tekrar container’a oturum açıp sayfanın içeriğinde değişiklik yaptıktan sonra, sayfayı Refresh ile yeniden yüklediğinizde güncellemelerin geldiğini göreceksiniz.

Şu an itibariyle elimizde bir tane nginx web sunucu servisini içeren container imajına sahibiz ve bu imajdan bir adet container oluşturarak bunu test ettik. Herhangi bir anda bu container’dan çok sayıda ihtiyacınız olduğunda da aşağıdaki PowerShell kodunu kullanarak aynı anda istediğiniz sayıda farklı isim ve ip adreslerinden yayın yapan container açabilirsiniz.

clip_image072

 

 

ÜÇÜNCÜ BÖLÜMÜN SONU;

Evet, Windows Server 2016 ile gelen ve sanallaştırmada yeni bir dönemi başlatacak “Container” mimarisini incelediğimiz makale serimizin üçüncü bölümüni de burada noktalıyoruz.  Bu bölümde Windows Server Container yönetimini adım adım örnek uygulamalarla inceledik. Makale serimizin bir sonraki bölümünde Hyper-V Container kullanımını detaylarıyla inceliyor olacağız. Görüşmek üzere, sağlıcakla kalın.


Mesut ALADAĞ
Microsoft MVP, MCT, P-TSP
www.mesutaladag.com | @mesutaladag

İlgili Makaleler

Bir yanıt yazın

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

Başa dön tuşu