Docker Platformu Nedir? Container Management System for Virtual Applications

Docker aslında bir sanallaştırma platformudur. Ancak sanal makinalardan farklı olarak işletim sistemini değil uygulamaları sanallaştırarak bizlere hızlı bir uygulama sanallaştırma ortamı sunmaktadır. Vmware ThinApp ya da Citrix XenApp gibi benzer uygulama sanallaştırma platformlarını düşünebilirsiniz ama Docker open-source bir platform olup distributed applications ortamları içinde kullanılabilmektedir. Ayrıca bu platform özellikle Linux dünyasında iyi bir yer kazanmışa benziyor. Etkili, hızlı bir çözüm olarak görüldüğünden özellikle AWS, Azure gibi pek çok cloud servisi de bu durumun farkında olmalı ki bizlere bu ortamı sağlayabileceğimiz hizmetler ve ürünler sunuyorlar. Docker’da elbette kendi platformunu kullanıcılara sunmakta.

https://www.docker.com/pricing

Docker sistemini kullanırken en çok duyacağınız kelime container olacaktır. Container nedir? Sanal makina ile arasındaki farklar nelerdir?

Yukarıdaki grafikte iki farklı server yapısı görmektesiniz. Soldaki sanallaştırılmış bir server, sağdaki geleneksel Linux kurulu tek işletim sistemi yapısına sahip bir server. Anlaşılabilir olması için böyle bir örnek verdim. Yoksa Docker sanallaştırılmış bir ortamda sanal bir işletim sistemi üzerinde de çalışabilmektedir. Ayrıca Linux dışında Windows ve OSX işletim sistemlerinde de çalışabilmektedir.

Mevcut bir serverda sanallaştırma yaparken üzerine Type 1  (ESXi türü bir hypervisor kurulumu) yada Type 2 türü (İşletim sistemi kurulup (Windows Server gibi) üzerine hypervisor (Hyper-V) kurulumu) sanallaştırma katmanı kurulup bunun üzerine sanal işletim sistemlerimizi kurarız. Soldaki örnekte en alt katmanda Type-2 kurulu bir yapı görüyoruz.

Bu yapının üzerinde uygulamalarımızı çalıştırmak istediğimizde önceki sanal OS ortamlarını hazırlayıp, güncelleştirmeleri kurup, güvenlik ve diğer ayarları yapıp daha sonra uygulamaların çalışması için gerekli yazılımları (dependencies) kurar hazırlarız ve uygulamamızı çalıştırmaya başlarız. Özellikle birbirlerinden ayrı olmalarını istediğimiz uygulamalar için ayrı ayrı işletim sistemleri hazırlayıp bu işlemleri yaparız. Hypervisor bizim için server kaynaklarını istediğimiz ölçüde bu işletim sistemlerine dağıtır ve uygulamalarımız çalışır. Bu bugüne kadar bildiğimiz senaryo bu.

Sağdaki örnek görülen Docker sistemi ve containerlar ise şöyle çalışır. Konsept olarak tüm uygulamalar aynı işletim sistemi altında çalışır ancak hepsi birbirinde bağımsız olarak hareket eder ve izole edilmiştir. Solda sanal OS yaratıyoruz. Sağda ise uygulamalarımız için container.

Docker için işletim sistemi altyapısı olarak çoğunlukla Linux kullanılmaktadır. Ubuntu, CentOS gibi. Ancak Windows ve OSX işletim sistemlerinde de çalışabilmektedir ama Linux genellikle tercih edilmektedir. Bu platform için piyasada ESXi gibi bir ürün bulunmamaktadır. İşletim sistemini kurduktan sonra üzerine Docker sisteminizi kurup birbirinde izole containerlar oluşturup uygulamalarınızı çalıştırabilirsiniz. Uygulamalar birbirlerini, dizinlerini dosyalarını vs. görmez. İşletim sistemi üzerinde tek çalışan uygulama kendileri sanarlar. Bildikleri tek şey hangi işletim sistemi üzerinde çalıştıklarıdır.

Bu şekilde her uygulama için ayrı bir OS ihtiyacımız olmamaktadır. Ancak uygulamaların çalışabilmesi için daha önce söylediğim gibi çeşitli gereksinimler mevcut olabilir. (dependencies) Örneğin bir web uygulaması için PHP5 gerekebilir. Aynı OS altında çalışan başka bir web uygulaması içinde PHP4 gerekebilir. Güzel olan taraf her container için gereken bu şeyleri kurabilirsiniz. Bunlarda aynı şekilde birbirlerinden bağımsız olarak çalışırlar. Bir container başka bir container için gerekli olan şeylere erişemez. Biz istemediğimiz sürece. Bu durumda izole edilmiştir.

Tek bir işletim sistemi üzerinde çalıştığımız için elbette kurulu olan uygulamalar bu işletim sistemi üzerinde çalışabilecek şekilde dizayn edilmiş olmalıdır. Ama Docker platformunun bize olan faydalarını şöyle düşünebiliriz. Ubuntu Linux işletim sistemi kurulu güçlü bir serverımız var ve bu server üzerinde 20 adet Linux platformu için uyumlu uygulama çalıştırmak istiyoruz.

1)Hypervisor ve virtual OS kısmına ihtiyacımız bulunmamaktadır. (Tabii ki Docker geleneksel yapı dışında istersek sanal yapımız üzerinde sanal bir serverda da çalışabilir. Sanal OS içinde uygulama sanallaştırma platformu kurabiliriz.)

2)Her uygulama için ayrı bir OS kurmak zorunda değiliz.

3)Tek bir işletim sistemi üzerinde çalıştığımız için bakım maliyetlerimiz ve zamanımız düşer. Güncelleme, güvenlik ve konfigürasyon işlemlerini sadece tek bir OS için yapmış oluruz.

4)Hızlı bir dağıtım (deployment) ortamımız olur. Aynı OS altında çalışan başka bir uygulama çalıştırmak istediğimizde ayrı bir sanal OS kurup hazırlama ihtiyacımız kalmaz. Çalışan işletim sistemimiz zaten var. 🙂 Sadece container yaratıp gereksinim duyacağımız yazılımları ekleyip çalıştırmak kalıyor.

5) Bir uygulamada sorun olduğunda ya da çalıştırmak istediğimizde sanal OS yeniden başlatmak, beklemek, vs. gibi durumlar ortadan kalkar. Bizim işimiz sadece container ile.

Bu kadar şeyi anlattıktan sonra elbette bu platformun bazı dezavantajları da mevcuttur. Sanallaştırma ortamımızda farklı işletim sistemlerini aynı ortamda barındırabiliyoruz. Docker sisteminde ise dediğim gibi tek bir OS üzerinde çalıştığımız için uygulamalarımız bu OS için dizayn edilmiş olmalıdır. Linux üzerinde çalışabilecek uygulamalarımız için Linux OS Kurulu bir işletim sistemi, Windows için ayrı, Mac OSX için ayrı olmalıdır.

Sanallaştırma ortamları zamanla olgunlaştığı için pek çok özellikleri zamanla bizlere sunmaya başlamıştır. Örneğin sanal OS makinalarımızı bir sunucudan başka bir sunucuya migrate edebiliriz. Bunu canlı olarak yapabiliriz. (Live migration) Failover-redundancy ortamlar kurabiliriz. Docker ortamında ise uygulamamızı ya da container migrate edebiliriz. Ama bunu canlı olarak yapamayız. Docker ortamı bu konularda henüz olgunlaşmadı. Ama zaman geçtikçe daha da gelişiyor ve bize sunduğu avantajları göz ardı edilemez. Tabii tekrar etmek isterim ki Docker sanal sunucularımız üzerinde çalışabildiği için kısmi olarak sunucu sanallaştırma tarafında bizlere sunulan bu HA (High Availability) özelliklerinden Docker platformlarımız içinde faydalanabiliriz.

Daha detaylı bilgi için;

https://www.docker.com/

Umarız sizler için yararlı bir makale olmuştur. Okuduğunuz için teşekkür ederim.

 

Exit mobile version