Konteyner(Container) Teknolojisi Nedir? Sanal Makineden Farkları Nelerdir?

SezerKahraman
6 min readMay 3, 2021

--

Yukardaki resimde gördüğünüz gibi bir gemi var ve bu geminin içerisinde farklı farklı konteynerlar mevcut.Her bir konteyner içerisinde farklı farklı malzemeler farklı ürünler bulunmaktadır.Her farklı ürün için özel bir gönderim yöntemi yok hepsinin bir standartı var ve bu standarta göre taşınıyorlar peki bu standart nedir? Her biri birbirinden bağımsız ve her biri aynı ebatta.Yani bir konteynerın taşınabilmesi için standart kurallara uyması yeterlidir.Şimdi siz kendi kendinize neden bu gemi üzerinden örnek veriyor veya Konteyner teknolojisiyle gemi örneğin ne gibi benzerlikleri var diye düşünüyor olabilirsiniz.Bunları anlatma sebebim şuan üstünde durduğumuz Konteyner teknolojisi gemilerin taşıdığı konteyner mantığı üzerinden ele alınmış ve oluşturulmuş bir teknoloji olmasından kaynaklanıyor. Konteyner teknolojisi adını Denizcilik Enstitüsünden almıştır.

Hypervisor Kavramı Nedir?

Geleneksel eski mimaride fiziksel sunucu üzerinde tek bir işletim sistemi çalışırdı tüm kaynakları tek bir işletim sistemi kitlerdi ihtiyaç duyduğumuz tüm uygulamalar bu sunucu üzerine kitlerdi fakat aynı uygulamanın farklı sürümlerini aynı sistem üzerinde çalıştırmak mümkün değildi. Sonrasında hayatımıza Hypervisor diye bir kavram girdi. Sunucu üzerinde birden fazla ve birbirinden bağımsız sanal sunucular kullanmaya başladık. Üzerine uygulamalar yükleyip uygulamaları kullanmaya başladık. Sanal mimariyi çok sevdik ve işimizi kolaylaştırdı fakat sanal platformda bizi kesmedi ve şimdide Container Mimarisi diye yeni bir mimariden bahsetmeye başladık.

Şimdi Konteyner tanımına geçmeden önce konunun daha iyi pekişebilmesi adına küçük bir örnek vereceğim.

-Bir gemi hayal edelim geminin içinde bir çok konteyner olduğunu düşünelim bu geminin kaptanı bir gün bu konteynerların bir tanesinin içine girip bir gün geçirmek istedi peki yaşamsal faaliyetlerini devam ettirebilmesi için bu Konteyner’ın içinde neler olmalı? Hava,su,gıda vs.. bunlar sağlandığı taktirde gemici bir gününü rahatlıkla Konteyner içerisinde geçirebilir değilmi. Şimdi bu örneği teknik tarafa uyarlayarak devam edelim. Bir uygulamanın çalışabilmesi için ihtiyaç duyduğumuz companentler nelerdir?

1-Uygulama Kodu

2-Uygulama Konfigürasyon Dosyaları

3-Uygulamanın ihtiyaç duyduğu kütüphaneler

4-Uygulamanın ihtiyaç duyduğu zamanlayıcılar

5-Haricindeki tüm bağımlılıklar

— ->Şimdi bir kutu düşünelim bu yukarda yazdığım 5 maddeyi bu kutunun içine koyalım ve kutuyu kapatalım. Demin ki verdiğim gemicinin konteyner içerisinde yaşayabilmesi için yanına aldığı malzemeler gibi gerekli olmassa olmaz dosyaları bizde kutunun içerisine yerleştirdik bu kutuyu fiziksel bir bilgisayara yüklenen işletim sistemi üzerine dış dünyadan bağımsız izole olacak şekilde sunucu üzerinde çalıştıralım ve bu kutu nereye taşınırsa taşınsın kutu içinde uygulama ve uygulama bağımlılıkları beraberinde gideceği için herhangi bir sorun olmadan çalıştırılabilir. İşte bu kutunun adı KONTEYNER (CONTAİNER) arkadaşlar.

Konteyner(Container) Nedir?

  • Konteyner(Container),bir uygulamanın ihtiyaç duyulan tüm bağımlılıklar, kütüphaneler ve diğer tüm nesnelerle birlikte paketlenerek standart hale getirilmesidir.
  • Konteynerlar bir bilgisayar ortamından diğerine tüm bağımlılıklarla birlikte güvenli bir şekilde taşınabilmektedirler.
  • Bir yazılım geliştiricinin dizüstü bilgisayarından test ortamına test ortamından production ortamına veya bulutta ki bir sanal makinaya aktarılması şeklinde olabilmektedir.
  • Taşıma işleminde uygulama ve uygulamanın ihtiyaç duyduğu tüm nesneler aktarıldığı için herhangi bir problem olmadan uygulama hizmet vermeye başlayacaktır.
Konteyner Mimarisi

Konteyner Mimarisinde en alt katmanda donanımımız bir üst katmanda Linux veya Windows tarzı bir işletim sistemi işletim sistemi üzerinde de konteynerlanmış uygulamaları yönetmesi için Container Engine(Konteyner Yöneticisi) bulunmaktadır.Bu Konteyner Engine Docker veya türevi bir Container Engine olabilir arkadaşlar bu Container Engine üzerinde birbirinden tamamen izole şekilde çalışan Konteynerlar bulunmaktadır.

  • Konteynerlanmış uygulamalar kısmında hangi konteyner içerisinde ne olduğu diğer konteynerlar tarafından bilinmemektedir.
  • Her konteyner birbirinden tamamen izole bir şekilde sadece içerisinde ki uygulamaları çalıştırmaktadır.
  • Orta katmanda bulunan Container Engine sayesinde sistem üzerinde Conteynerlar oluşturulmakta ve çalıştırılabilmektedir.

Şimdi size bir sorum var arkadaşlar Sanal Mimari varken Container Mimarisinin Ortaya Çıkış Nedeni Sizce Nedir?

Sanal mimari üzerinde birden fazla farklı amaçla oluşturulmuş uygulama düşünelim veya aynı uygulamanın 4,5,8 gibi farklı sürümlerini test etmek istiyoruz.

Sanallaştırma

Sanal platform üzerinde bir uygulamayı çalıştırabilmek için bu katmanların oluşturulması gerekmektedir. Oluşturulan bu sanal makinaların işletim sistemlerinin yüklenmesi update işlemleri, güvenlik yamaları, yetkilendirmeler gibi süreçleri düşündüğümüzde hala elimizde uğraş isteyen ve uygulamaların çalışmadığı durumda da kaynak tüketen bir sanal mimari bulunmakta buda yönetimi zorlaştırmaktadır.

Konteynerlaştırma

Yine elimizde birden fazla farklı uygulamaların olduğunu düşünelim. Bu uygulamaları Konteynerlaştırabilmek için Container Engine dediğimiz Konteyner yöneticisine ihtiyaç duymaktayız. Konteyner Engine içerisinde ihtiyaç duyduğumuz uygulamaları platformdan bağımsız şekilde tüm bağımlılıklarla beraber Container haline getirdik ve Container Engine üzerinde çalıştırmaya başladık.Container Engine fiziksel donanım üzerine yüklenen işletim sistemi üzerinde çalışmaktadır.Windows veya Linux sunucu olabilmektedir bu işletim sisteminin kütüphaneleri ve kernel’ı bulunmaktadır.

  • Gördüğünüz gibi uygulamalarımızı çalıştırabilmek için Sanal Mimaride olduğu gibi yeni sanal bir işletim sistemi kurulumu yapmadık. Uygulamalarımızı birbirinden izole şekilde Konteyner Engine üzerinde çalıştırıp ayağa kaldırdık. Bu Container Engine üzerinde desteklenen tüm uygulamaları aynı anda çalıştırabiliriz. Örneğin, bir uygulamanın 1,2,3,4,5 gibi versiyonlarını aynı anda çalıştırıp test edebiliriz. Sanal mimaride ki gibi hepsi için farklı sanal makinalar oluşturmaya gerek kalmadı gördüğünüz gibi.

Aslında tam olarak yapmaya çalıştığımız temel amaç uygulamaların verileri işleyebileceği bir ortam oluşturulması ve bu verilerin güvenli bir şekilde saklanması.

Örneğin,web sitesi yayınlamak için web server yazılımına dataların saklanması için database uygulamasına ihtiyaç duymakta ve bu uygulamalar sayesinde veriler işlenmektedir. Burada temel amaç uygulamaların ihtiyaç duyduğu platformların oluşturulması ve uygulamaları çalıştırarak verinin işlenmesidir. Konteyner Mimarisi ile aradaki katmanları devreden çıkartarak direkt uygulamayı kullanılabilir duruma gelmekteyiz.

Konteyner Mimarisini ortaya çıkmasının bir diğer sebebi de demo ortamında yazılan bir uygulamanın production ortamına geçerken yaşanılan sıkıntılardır. Bunu da sizlere bir örnekle aktarmaya çalışacağım.

Test ortamında bir uygulama yazmaya başladınız yazdığınız bu uygulama test ortamında sorunsuz çalışıyor gün geldi bu uygulamayı şirketinizde canlı ortama yani production ortamına taşıyıp devreye almak istiyorsunuz test ortamında mükemmel çalışan uygulamayı canlı ortama taşımak demek uygulamanın yazıldığı ortamda ki kernel, uygulamanın yazıldığı ortamda ki versiyon bilgileri, ssl kütüphanesi gibi bir çok seçeneğinde kontrol edilmesi anlamına gelmektedir. Tabi canlı ortama geçiş işlemi hiçbir zaman sorunsuz bir şekilde olmamakta ve yeni patchler yazılarak eksikler giderilmektedir. Yani test ortamında yazılan uygulamalar gerçek ortama geçtiğinde platform farklılığından dolayı çalışmamakta ve hatalar ortaya çıkabilmektedir. Konteyner Mimarisi sayesinde demo ortamında yazılan bir uygulama canlı ortamda da sorunsuz ve platformdan bağımsız şekilde çalıştırılabilmektedir. Çünkü demo ortamında Container haline getirilip paketlenen uygulama production ortamında da aynı özelliklerde çalıştırılacağı için herhangi bir sorun olmadan ayağa kaldırılacaktır.

Şimdi ise üzerinde durduğumuz 3 mimariyi tekrar inceleyim ve toparlayalım.

  • Geleneksel Mimaride fiziksel donanım üzerine kernel yüklemesi yapılarak uygulamalarımızı yönetmekteyiz.Geleneksel Mimaride izolasyon bulunmamakta ortak kütüphaneler kullanılmakta işletim sistemi ve uygulama maliyetleri oldukça yüksek olmaktadır
  • Sanal Mimariye baktığımızda Hypervisor üzerine yüklenen her bir sanal makinanın Kernel’ı bulunmaktadır ve uygulamalar bu sanal makinanın üzerine yüklenerek yönetilmektedir. İzolasyon bulunur, ortak kütüphane kullanımı yok maliyetler yüksek, kurulum ve yönetim işlemleri zaman almaktadır.
  • Konteyner Mimarisinde ise izolasyon bulunmakta, ortak kütüphane kullanımı yapılmamakta az iş yüküyle çok fazla servis ayağa kaldırılabilmektedir. Daha az donanım bağımlılığı bulunmaktadır.

Şunu belirtmek isterim Konteyner Mimarisi ile birlikte artık bütün uygulama işlemlerimizi servisler üzerinden yapıyor olacağız. Sanallaştırma platformunda kullandığımız bana şu özelliklerde Vm(Virtual Machine) lazım cümlesi yerine şu uygulama servisine ihtiyacım var cümlesini duyuyor olacağız.

Konteyner Teknolojisinin Faydaları Nelerdir?

  • Platform Bağımsızlığı yani bu ne demek bir kere oluşturun istediğiniz yerde kullanın.
  • Kaynak verimliliği ve yoğunluğu
  • Efektif izolasyon
  • Saniyeler içinde oluşturun başlatın, çoğaltın veya imha edin(Yüksek Hız)
  • Operasyonel Kolaylıklar
  • Geniş ve Akıcı Ölçeklendirme
  • Pipeline Yönetim Kolaylığı

Konteyner Mimarisi ve Sanal Mimari Arasındaki Farklar Nelerdir?

Sizlere bu yazımda Konteyner(Container) Teknolojisini, diğer mimarilerle arasındaki farkları anlatmaya çalıştım umarım yararlı bir yazı olmuştur. Bir sonraki yazımda görüşmek üzere…

Kaynaklar:https://www.udemy.com/MuratAksu, https://stackoverflow.com

--

--