Search:

Neden Docker?

Docker’ neden kullanmalıyız?

Category: Docker
Category: Docker

Docker Nedir, Özellikleri Nelerdir? - kloia Blog

Yük taşımacılığı eski zamanlardan beri varolan bir ihtiyaç. Kargo gemileri ile bu yükler yüzyıllar boyunca bir limandan diğerine taşındı. Çoğu zaman kargoların gemiden boşaltılması ve yeni kargoların yüklenmesi için geçen süre, geminin denizde geçirdiği süreye kıyasla daha fazla sürmekte idi. Kargolar gemiden tek tek indiriliyor ve kamyonlara yükleniyor, yeni yükler ise gene kamyonlardan tek tek indirilip gemiye yükleniyordu. Bunun yanında içiçe taşınan bazı yükler, birbirleri ile nem ve koku olarak karışıyor, ve malların kalitesini etkiliyordu.

1955 yılında, Malcom P.McLean, günümüz konteyner yapısı olan, "intermodal" taşımacılık olarak da bilinen, farklı ortamlar(karayolu, denizyolu, havayolu) arasında transferin sorunsuz olması ve dok işçilerine daha az bağımlı hale gelinmesini sağlayan yapıya geçişin öncüsü olmuştur. Bu yaklaşım sayesinde konteyner ve aynı kargo, en az etkileşim ile, başlangıç noktasından, varış noktasına sorunsuz olarak teslim edilmeye başlanmıştır.

Son zamanlarda yazılım geliştirme sektöründe de adını sıkça duymaya başladığımız "container" yaklaşımının çözmeye çalıştığı sorunlar da benzerdir. Yazılım geliştirme sektörü taşımacılık ve üretim sektörünün uzun zaman önce çözmüş oldukları verimlilik sorunlarını henüz çözememiştir ve bu açıdan bakıldığında henüz emekleme safhasındadır.

Docker en çok bilinen ve kullanılan  "container" yapısı olarak yazılım geliştirme ve altyapı yönetim takımlarının hayatlarına girmeye başlamıştır.

 

0_Bgknz43dTVIf4b3w

Neden Docker?

1- Para tasarrufu: Docker, sanal sunucuların (VM) aksine bir Hypervisor(VMWARE) katmanına ihtiyaç duymaz, dolayısıyla bu yöndeki lisans giderleriniz sıfırlanacaktır. Her Docker Container aynı işletim sistemi Kernel'ı üzerinde çalışır, yani VM'lerin aksine tek bir HW üzerinde farklı kernel ve işletim sistemleri yoktur. Tek bir işletim sistemi olmasının da lisans maliyeti açısından tasarrufu vardır. 

Docker kullanılan altyapılarda Hypervisor(VMWARE, …) ve OS(İşletim Sistemi) lisans maliyetlerinde ciddi tasarruflar sağlanabilir. 

2- Düşük footprint: Sunucu işletim sistemleri öntanımlı olarak üzerinde birçok servis, kütüphane ve dosya ile birlikte gelir ama Docker yaklaşımı ile birlikte gelen düşük "footprint" kullanımı sayesinde yazılımlar sadece ihtiyaç duyduğu bağımlılıklar ile çalışır ve sanal sunuculara (VM) kıyasla storage kullanımı çok düşüktür.

Docker kullanarak Storage gereksinimlerinizde tasarruf sağlayabilirsiniz.

3- İzolasyon: Aynı işletim sistemi üzerine farklı yazılım ve servislerin kurulumunun yapıldığına sıkça şahit oluruz. Bunun nedenleri arasında:

– Sunucu kaynaklarını daha verimli kullanmak, lisans maliyetleri,

– Sunucu/VM kaynak sayısının, sunulması gereken servise göre daha az olması. 

– Farklı işletim sistemleri ile uğraşmak istemememiz (Yönetim maliyeti)

olabilir.

Bu yaklaşım alttaki riskleri barındırabilir:

– İç içe giren kütüphane, dosya, konfigurasyon gibi bağımlılıklar

– Yapılan bir hata sonucu, İşletim Sistemi üzerindeki tüm servislerin aynı anda etkilenmesi

– Taşıma (migration) gibi operasyonların birçok farklı yazılımı aynı anda kapsaması gerektiğinden dolayı kompleks olması

Buna karşılık her Docker konteynerı kendi Namespace'inde çalışır, yani aynı işletim sisteminin Kernel'ını kullanmalarına rağmen, birbirlerini görmezler. Her konteynerde init prosesi (0 ID'li proses) servisin kendisidir(Örnek tomcat bir sunucunun init prosesi Java'dır). Bu yaklaşım sayesinde, Docker konteynerlerin farklı ortamlar, farklı servis sağlayıcılar veya farklı teknolojiler arasında taşınması basit bir operasyon haline gelir.

4- Daha hızlı ve verimli kod atım(deploy) süreci: Ortamlar(Dev, Test, Live) arasındaki farklar nedeniyle oluşan beklenmedik durumları Docker konteynerler kullanarak kökten çözmek mümkün. Lokal ortamınızda neyi test ediyorsanız, Live ortamda da aynı şekilde çalışacaktır. Bunun yanında Docker konteynerlerini tanımladığımız Dockerfile'ları, Git üzerinde versiyon kontollü olarak tutmak da büyük bir avantaj. Üstelik artık birçok Cloud sağlayıcıda(AWS, Azure, IBM Bluemix…) ve birçok CI(Continuous Integration) araçlar(Jenkins, Shippable, ..) Docker kullanarak versiyon Deploy yapmak mümkün.

5- Teknoloji bağımlılıklarının yok edilmesi: Kullanmakta olduğumuz Cloud sağlayıcı(AWS, Azure, IBM Bluemix) veya teknoloji sağlayıcısı(HP, IBM, Microsoft, …) size kendi araç ve teknolojilerini kullanmaya teşvik edecektir ve bu da beraberinde artık o teknolojiden kopamayacağınız seviyelere sizi getirebilir. Buna karşılık Docker konteynerleri artık herhangi bir servis sağlayıcı ve teknoloji üzerinde çalıştırabilir ve başka altyapı veya servis sağlayıcısına geçiş yapmanız çok kolaylaşır.

6- Ölçeklendirme (Scaling) : VM kullanan yapılarda sunucuların yatay veya dikey olarak büyüyüp küçülmesi dakikalar mertebesinde iken, Docker konteyner lerin açılıp kapanması saniyeler mertebesindedir. Bu bakımdan trafiğe göre sisteminizin ölçeklenmesi saniyeler içerisinde olabilmektedir. 

İsmi sıkça "Mikro servisler" ile anılan Docker, aslında mevcut dağıtık veya monolitik mimariniz üzerinde de kullanılabilir. Sonuç olarak Docker mimarisine geçiş yapmak, verimlilik açısından kaçınılmazdır. Aksi halde rekabet dezavantajı orta ve uzun vadede hissedilecektir.  

Derya (Dorian) Sezen

Derya, a.k.a. Dorian, ex-CTO of an amazon.com subsidiary, is currently working as Cloud and DevOps Consultant at kloia.