Docker nedir? Neden bu kadar Önemli?

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…

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

1 Yorum

  1. Ali İNCE   •  

    Teşekkürler.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir