0

Windows Containers Nedir? Nasıl Kullanılır? İlk olarak Linux ile başlayan Container teknolojisini; uygulamaları diğer uygulamalardan izole bir şekilde, tam bir sanal makina kullanma gerekliliği olmadan ve Development’tan Production’a kadar aynı özelliklerde çalışmasını sağlayan bir sanallaştırma teknolojisi olarak tanımlayabiliriz.

Container denildiğinde ilk akla gelen Docker sayesinde bu teknolojiyi kolaylıkla kullanabilmekteyiz. Docker’ın Linux Container’ları gibi Windows Container’ları da kullanabiliyoruz. Windows Container olarak kullanabileceğimiz 2 çeşit Container Image bulunuyor: Windows Server Core ve Nano Server.

Nano Server sadece x64 uygulamaları destekleyen daha hafif bir Image iken, Windows Server Core ise
full .NET framework uygulamalarını çalıştırabiliyor ve bize daha çok oyun alanı sağlıyor. .NET Core ve ASP.NET Core uygulamaları her 2 Image üzerinde de çalışabiliyor ancak Core uygulamaları için Nano Server kullanmak daha az yer kapladığı için daha mantıklı görünüyor.

Sistem Gereksinimleri ve Ortamın Hazırlanması

Şimdi Windows Container’ları nasıl kullanacağımıza gelelim, yapacağımız örnek için için bazı ön koşulları sağlamamız gerekiyor:

  • Windows 10 Pro / Enterprise Anniversary Update ve ya daha üst versiyon
  • Hyper-V and Containers özelliklerinin yüklü olması (Windows Features üzerinden kontrol edebilirsiniz)

 


Resim-1 : Windows Features ekranı

PC üzerinde Virtualization ayarının Enabled olması (Resim- 2‘de görünen Task Manager Performance tab üzerinden kontrol edebilirsiniz).


Resim-2 : Task Manager performance tab

NOT: Eğer Virtualization disabled olarak görünüyorsa BIOS üzerinden bunu aktif hale getirebilirsiniz. Bunun için bilgisayar üreticisiniz web sitesinden BIOS ayarlarınızla ilgili destek bölümüne bakabilirsiniz.

Docker for Windows nested virtualization desteklemediği için bunu bir VM üzerinde yapamazsınız, bu nedenle fiziksel bir PC üzerinden yapmanız gerekiyor.

Öncelikle bilgisayarınıza eğer daha önce kurmadıysanız Docker for Windows kurmanız gerekiyor. Windows üzerine Docker kurulumunu tamamladıktan sonra (logout – login gerektiriyor) Docker otomatik olarak başlayacaktır.

Docker varsayılan ayarlarında Linux Container ile başlar. Bunu Command Prompt üzerinden Docker version komutu ile kontrol edebilirsiniz.


Resim-3 : Docker version (Linux Containers)

Bunu değiştirmek için tray’de yer alan Docker ikonuna sağ tıklayarak “Switch to Windows Containers” seçeneğini seçelim.


Resim-4 : Docker “Switch to Windows Containers” seçeneği

Bu seçeneği aktif hale getirdikten sonra Docker Version komutunu tekrar çalıştıralım. Server altındaki OS/Arch seçeneğinin Windows/amd64 olarak değiştiğini görebilirsiniz.


Resim-5 : Docker version (Windows Containers)

Container İçerisinde Çalışacak ASP.NET (Core) Uygulamasının Hazırlanması

ASP.NET ve ASP.NET Core uygulamaları Container içerisinde çalışabilir. Aralarındaki tek fark çalıştıracağınız uygulamaya uygun olan bir Container Image seçmeniz gerekmesi: Windows Server Core ya da Nano Server. Yapacağımız örnekte bir ASP.NET Core uygulaması ve Windows Server Core Image kullanacağız.

NOT: Örneği daha açıklayıcı olması açısından Visual Studio 2017 15.3 ile birlikte gelen Windows Container Docker Support özelliği ile yapmayacağız.

Projeyi oluşturmak istediğiniz klasörde Command Prompt üzerinden Dotnet new mvc komutu ile yeni bir ASP.NET Core MVC projesi oluşturalım.


Resim-6 : dotnet new mvc

Projeyi oluşturduktan sonra Dotnet run komutu ile uygulamanızı çalıştırabilirsiniz. Uygulama varsayılan ayar olarak 5000 portu üzerinden çalışacaktır. Browser üzerinden http://localhost:5000 yazarak Resim-7‘deki gibi web uygulamamızı görebiliriz.


Resim-7 : localhost:5000 üzerinden çalışan web uygulaması

Aynı klasörde yine Command Prompt üzerinden dotnet Publish -c Release -o PublishOutput komutu ile uygulamamızı Release konfigurasyonunda PublishOutput klasörüne Publish edelim.


Resim-8 : dotnet Publish

Docker Dosyası

Container Image oluşturmak için proje klasörü içerisinde bir Dockerfile dosyası oluşturulması gerekiyor.


Resim-9 : Dockerfile

Dosyanın içeriğini de aşağıdaki gibi düzenleyelim:

FROM microsoft/aspnetcore:2.0

COPY ./PublishOutput/ ./

ENTRYPOINT [“dotnet”, “mshowto.dll”]

Burada;

FROM microsoft/aspnetcore Image 2.0 versiyonunu alacağını,

COPY PublishOutput klasörünü Container içerisinde kopyalacağını,

ENTRYPOINT ise Container’ın giriş noktası olarak dotnet komutunu “mshowto.dll” parametresi ile çalıştıracağını belirtiyor.

Docker Image Hazırlanması

Uygulamamızı ve Dockerfile dosyasını hazırladıktan sonra sırada Docker Image oluşturmaya geldi. Bunun için de Docker build -t mshowto . komutunu çalıştıralım. Burada -t ile Image adını, . ile de Dockerfile Path belirtiyoruz.


Resim-10 : Docker build

Build işlemi tamamlandıktan sonra Docker Images komutu ile mevcut Image listesine ulaşabiliriz.


Resim-11 : Docker Images

ASP.NET Core Uygulamasının Container İçerisinde Çalıştırılması

Image hazırlanmasından sonra Docker run -d -p 80:80 mshowto komutu ile uygulamamızı Container içerisinde çalıştırıyoruz.

-d parametresi Container’ı Detached Mode ile yani mevcut Shell’den bağımsız olarak çalıştırmak,

-p parametresi de Container portunu host portuna yönlendirmek için kullanıyoruz.


Resim-12 : Docker run

Docker ps komutu ile çalışan Container’ları görebiliriz.


Resim-13 : Docker ps

Resim-13‘te NAMES kısmında uygulamamıza rastgele bir isim üretildiğini görebilirsiniz. Daha anlaşılır bir isim vermek için –name parametresini kullanarak;

Docker run -d –name mshowtowebapp -p 80:80 mshowto

komutu ile “mshowtowebapp”
ismini verebiliriz.

Container’ların Windows ile NAT aracılığı ile konuşmasındaki bir bug nedeniyle localhost üzerinden uygulamamıza erişemiyoruz. Bu nedenle Container’a ait iç IP adresini kullanmamız gerekiyor.

Docker inspect komutu ile Container’a ait IP adresini öğrenebiliriz.

Docker inspect -f “{{ .NetworkSettings.Networks.nat.IPAddress }}” mshowtowebapp


Resim-14 : Docker inspect

Artık browser üzerinden Docker içerisinde çalışan uygulamamıza erişebiliriz.


Resim-15 : Docker içerisinden çalışan web uygulaması

Bonus

Kitematic kullanarak da mevcuttaki Container’lar hakkında bilgi edinebilir ve çeşitli işlemleri gerçekleştirebilirsiniz.


Resim-16 : Kitematic arayüzü

Docker ile ilgili örneklere aşağıdaki linklerden erişebilirsiniz.

https://github.com/dotnet/dotnet-Docker-samples/tree/master/aspnetapp

https://github.com/Microsoft/dotnet-framework-Docker-samples/tree/master/aspnetapp

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

Referanslar

www.mshowto.org

https://blogs.msdn.microsoft.com/webdev/2017/09/07/getting-started-with-Windows-Containers/

TAGs: Windows 10, Containers, Docker, Nano Server, ASP.NET Core, Kitematic, Windows Containers Nedir, Windows container, Windows Containers uygulamalari, windows server container nedir,

Bu İçeriğe Tepkin Ne Oldu?
  • 3
    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