Home TürkçeDevOps Docker nedir? Neden bu kadar Önemli?

Docker nedir? Neden bu kadar Önemli?

by Fatih Boy
1 comment

Son zamanların yıldızı en çok parlayan, adını en çok duyduğumuz teknolojilerinden birisi hiç kuşkusuz Docker. İlerideki makalelerime referans olması ve hiç duymayanlarınıza en azından kulak dolgunluğu olması adına, bu makalemde sizlere Docker’dan kısaca bahsetmeye çalışacağım.

2013 yılı başlarındaki ilk sürümlerinden itibaren gözlerin üzerinde toplandığı Docker’ın ne olduğunun anlatmanın belki de en kolay yolu neyi çözdüğünü anlatmak olacaktır.

İş hayatım boyunca görev aldığım farklı firmaların şapkaları altında irili-ufaklı pek çok geliştirme ve operasyon ekiplerini yönettim. Bu ekipler arasındaki koordinasyonu sağlayabilmek adına, DevOps ekimlerinin oluşturulmasında da bizzat bulundum.  Buradan edindiğim tecrübe ile şunu rahatlıkla söyleyebilirim ki geliştirilen yazılımların üretim ortamlarına atılması süreçlerini ne kadar otomatize ederseniz, kafanız o kadar rahat eder. Continuous Integration ile başlayan, Continuous Testing ve Delivery ile devam eden bu süreçler sayesinde,  yazılım geliştiricilerin “benim makinemde çalışıyor” (works on my machine) doğal savunma mekanizmasından o kadar çabuk kurtulabilirsiniz. Bu süreçleri kurmaktaki ortak motivasyon her zaman sahaya daha hızlı ürün çıkarma arzusudur. Bu sebeple hep tekrar edilebilen, otomatize edilebilen süreçlerin kurulması istenir. Bu otomasyon bize geliştirme ortamında çalışan uygulamanın üretim ortamında da aynı şekilde, ve tüm bağımlılıkları ile birlikte,  çalışmasını sağlayacaktır. Bu sebepledir ki; Üretim ortamlarının oluşturulmasında genelde sanal makineler tercih edilir. Tekrar edilebilir, yenilenebilir, yönetilebilir, hatta anlık görüntüleri alınabilir olan sanal ortamlar aynı zamanda istediğiniz uygulamaya istediğiniz kaynağı verebilme lüksünü de bizlere sunmaktadır.

Tüm sisteminiz otomatize edildiğinde, yük altında tepki süresi düşen uygulamanızın yatayda çoğaltılması bizim için çocuk oyuncağı olacaktır. Yeni bir sanal makine oluştur, Continuous Delivery sürecine dahil et, puppet/chef v.b. uygulamalar ile ortamı hazırla, uygulamanı deploy et, load balancer’ını yapılandır ve hazır….

Diğer yandan, bu rahatlığın getirdiği izole ve yenilenebilir ortamın yanında pek de arzu etmediğimiz bir yan etkisi de bulunuyor; tekrar ve tekrar kaynak ayırmamız gereken işletim sistemleri, yenilenmesi gereken ortam hazırlama süreçleri. Bu durumu aşağıdaki grafikle daha rahat gözümüzde canlandırabiliriz;

Geleneksel sanallaştırma

Pek çok senaryoda bir kaç MB’ın üzerine çıkmayan, işlemci ve hafıza kullanımı da iş yoğunluğuna göre değişen uygulamalar için onlarca/yüzlerce GB’lık disk ve hafıza alanı ve işlemci gücü ayırmamız şart. Tek amacı uygulamamızın koşması olan bu sanal sistemler çoğunlukla, değerli olan sistem kaynaklarımızı uygulamalarımızdan daha hızlı şekilde tüketmekte. Dolayısıyla alternatif bir mimari şart.

Docker yaklaşımı

İşte bu noktada Docker sahneye çıkmakta. Docker bu resimde gözünü çoğunlukla işletim sistemi kaynaklarına dikmekte. En büyük ihtiyacımız olan uygulamalar arası izolasyonu getirmekle birlikte bunu sanal makineler üzerinde koşan işletim sistemleri seviyesinde gerçekleştirmek yerine  doğrudan ana işletim sisteminde çekirdek desteğini de yanına alarak işlem düzeyinde gerçekleştirmekte. Dolayısıyla Docker, işletim sistemlerinin üstünde ve işlem bazında bir sanallaştırma ve izolasyon sunmakta. Uygulamalar tüm bağımlılıklarıyla birlikte paketlendiği için, örneğin aynı makine üzerinde .Net ya da java’nın farklı sürümlerine ait uygulamaları rahatlıkla çalıştırabilirsiniz. Docker, sunduğu soyutlama katmanı sayesinde uygulama paketiniz sistem bağımsız şekilde Container (konteynır)’lar  içerisinde çalışabilmekte. Her bir paket deyim yerindeyse tek başına tüketilebilen birer hap Smile haline gelmekte. Bu sayede uygulama kurulum süreçlerini de basitleştirmekte. Bunu üzerine bir de Docker paketlerinin birbirlerinin üzerine de eklenebildiğini (ki ilerleyen makalelerde bunu da göreceğiz) düşünecek olursak kazandığımız sistem kaynağının yanında bir o kadar da önemli olan kurulum, dolayısıyla da hareket kabiliyetimiz de oluyor.

Docker Container yaklaşımı

İlk adımlarını Linux işletim sistemi üzerinde atan Docker, bir süredir Apple ve Microsoft ile de yakın temasta. Bunun ilk çıktısı ise şüphesiz ki yakın zaman önce duyurusunu yaptığım Docker for Windows ve Docker for Mac sürümleri. Microsoft tarafında bu birliktelik daha da ileri noktada; şu an için Hyper-V temelli olan Windows’un Docker desteği, Windows Server 2016 ile birlikte doğrudan işletim sistemi seviyesine indirilerek daha derin ve native Docker desteği sunulacak.

Kargo gemisi :)

Günümüz sanallaştırma teknolojisin geldiği nokta ve kullanım alanları göz önüne alındığında Docker’ın geleceğinin çok parlak olacağını rahatlıkla söyleyebiliriz…

Şu Yazıları da Sevebilirsiniz

1 comment

Ali İNCE 18 Kasım 2016 - 10:08

Teşekkürler.

Reply

Leave a Comment

* Bu formu kullanarak, verilerinizin bu web sitesi tarafından saklanması ve kullanılmasını kabul ediyorsunuz.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bunu kabul ettiğinizi varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul Et Daha Fazla Bilgi