.NET Core Uygulamasını Dockerize Etme

Docker, açık kaynak kodlu bir sanallaştırma yazılımıdır. Sanallaştırmadan kasıt ise, işletim sisteminin dosya sistemini, ortam değişkenlerini her bir konteynera özel olarak sağlamasıdır. Aynı işletim sisteminde çalışan konteynerlar kendileri istemedikleri sürece birbirlerine erişemezler.

Peki  VMWare, Hyper-V gibi sanallaştırma platformlarının yanında neden Docker’a ihtiyaç duyarız?

  • Docker direk olarak işletim sistemi üzerinde çalışır. Yukarıda yazdığım diğer sanallaştırma platformları ise quest bir işletim sistemine ihtiyaç duyarlar. Sanallaştırma için gerekli disk alanı ciddi oranda azalır.
  • Hypervisor üzerinde çalışan sanallaştırma platformlarına bakım maliyeti oldukça yüksektir. Her bir sanal makina için işletim sistemi güncellemesi yapılması gerekir.

Docker Cli Genel Bakış

  • version -Bilgisayarımızda kurulu olan docker versiyonunu gösterir
  • pull -Uzaktaki imagaları local makinaya çekmek için kullanılır.
  • run -Elimizdeki imagedan çalıştırılabilir bir konteyner elde ederiz.
  • start -Durdurulan konteyneri başlatır.
  • stop -Konteyneri durdurur.
  • ps -[a]-[q] -Mevcut makineda çalışan konteyneri listeler. -[a] tüm konteynerleri gösterir. -[q] sadece konteyner Idlerini gösterir.
  • rm CONTAINER_ID -Konteyneri siler.
  • images -makinada kurulu olan tüm imajları listeleri
  • rmi IMAGE_ID -Imajları siler
  • logs CONTAINER_ID -Logları gösterir.

 

Docker CLI’ına kısaca göz attıktan sonra şimdi .NET Core 2.0 Web API projesi oluşturup bunun nasıl dockerize edileceğine bakalım.

Projemizi oluşturduktan sonra proje içine bir tane DockerFile oluşturuyoruz.

DockerFile içerisine yukarıdaki komutları yazıyoruz. Buradaki işlemler aslında çok basit.

  • Kullanacağımız imajı tanımlıyoruz.
  • Uygulamamızın kullanılacağı klasörü tanımlıyoruz.
  • Dotnet uygulamamızı restore ediyoruz.
  • Relase modda build ediyoruz.
  • Uygulamamızın kullanacağı portu envinronment veriable ile tanımlıyoruz.
  • Son olarak da konteyner ilk ayağa kalktığında uygulamamızı çalıştırıyoruz.

docker build -t sample/web-api:1.0.0 .” komutu ile docker imajımı yaratıyorum.

İşlemler ilk çalıştırmada biraz zaman alabilir. Başarılı bir şekilde bittikten sonra “docker images” komutu ile oluşan imajımızı görebilir.

 

docker run –name sample -p 5001:5001 sample/web-api:1.0.0” komutu ile uygulamamı ayağa kaldırıyorum. Basitçe bir .net core apimizi dockerize etmiş olduk.

 

Singleton Desing Pattern

Singleton patterni ile bir nesnenin çalışma zamanında tek olmasını garanti edebiliriz. Böyle söyleyince kafamızda bir şeyler canlanmadıysa daha somut örnekler veriyim. Örneğin;

  • veritabanı kullandığımız uygulamalarımızda connectionString bilgisini okumak için kullanabiliriz.
  • Projemizdeki konfigürasyon bilgilerini okumak için de kullanabiliriz.

 

İmplementasyonu çok basit. Aşağıdaki UML şemamızı inceleyerek işe başlayalım.

  • Singleton isimli bir class oluşturduk.
  • Bu class’ın constructorını private olarak tanımlıyoruz. Bunun sebebi ise herkes Singleton singleton=new Singleton() şeklinde belleğe yeni bir nesne yaratmasını engellemek.
  • Yine private olarak Singleton tipinde bir _instance yaratıyoruz.
  • Bu nesneye ulaşmak için ReturnInstance tipinde public bir metot yazıyoruz.
Bu şekilde classımız yazmış olduk. Ama asenkron işlemlerde kullanmak istersek bu metodumuzu thread safe hale getirmeliyiz. Bunu da lock koyarak halledebiliriz.
 

 

Azure Face Api Kullanımı

Bu yazımda Azure Face Api kullanarak gönderdiğimiz fotoğraftaki kişininin;

  • Yaşını
  • Cinsiyetini
  • Gözlüğü olup olmadığını varsa ne tip gözlük kullandığını
  • Gülümseyip gülümsemediğini öğreneceğiz

Öncelikle Azure Portal>New>Cognitive Services Api yolunu izleyerek yeni bir face api oluşturuyoruz.

Daha sonra ise api keylerimizi alıyoruz. İleride lazım olacak.

 Şimdi yeni bir form app oluşturuyoruz ve projemize aşağıdaki dll’i nuget aracılığıyla ekliyoruz.

Ve aşağıdaki gibi bir form tasarımı yapalım. Çeşitli fotoğraflar ile api’den gelen sonuçları ekranda gösterelim.(Fotoğrafların üzerine tıklayarak büyük hallerine ulaşabilirsiniz)

Projeyi buradan indirebilirsiniz