Docker Nedir?

Günümüzde işletmeler büyük bir dönüşüm halindeler. İşletmler, gün geçtikçe çeşitli bulut, veri merkezi ve uygulama mimarilerini rasyonalize ederken mevcut uygulamalar ve altyapılar ile sınırlandırılmışlardır. Docker işletmelerin bu gelişimini sağlayacağı bir platform olarak ortaya çıkarak uygulamalar ile donanım arasında, yazılım geliştiriciler ile sistem yöneticileri arasında daha iyi bir işbirliğini sağlayar.

Docker, linux kerneline eklenen LXC özelliği ile ortaya çıkıyor. Docker işletim sistemi seviyesinde LXC  ile konteynırların izolasyonunu ve çalışmasını sağlar. Daha sonraki dönemlerde LXC bağımlılığını kaldırarak kendi bünyesinde LXC’yi yeniden kodlayarak libcontainer adında yeni bir teknoloji oluşturmuştur.

Containerlar ile birlikte sunucu üzerinde hypervisor ile sanal makine oluşturmak yerine, sunucu üzerine sadece bir tane işletim sistemi kurup, bu işletim sistemi üzerinde user space denilen alanlarda containerlar oluşturarak içerisinde uygulamalarımızı çalıştırabiliyoruz. Bir işletim sistemi üzerinde yer alana containerlar, işletim sistemini ortak olarak kullanırlar.

Örneğin bir container CPU kullanmıyorken, diğer container tüm CPU’yu kullanabilir. Şekilde görüldüğü gibi uygulama containerları ortak kütüphaneleri kullanıyorlar ve izole bir şekilde çalışıyorlar. Sanal makinelerde ise, her bir uygulama için ayrı işletim sistemi ve kütüphane dosyaları ayrılmak zorunda,  bu yapı hypervisor aracılığıyla üzerinde bulunan sistemleri işletim sistemi seviyesinde ayırmasıyla elde edilir.

Bu teknoloji, Google, IBM ve Microsoft gibi şirketlerin de kullanımıyla daha popüler bir hale gelmiştir. Docker sisteminin, sanal makinalara göre daha esnek olması ve tamamen ücretsiz olması çok yaygın hale gelmesini sağlamıştır.

Containerlar ile uygulamaların başka bir sunucuya veya ortama taşınması durumunda çalışmasını garanti eder. Containerlar bunu, uygulumayı sistem kaynaklarından (ağ, deploma vb) soyutlayarak yapar.

Containerlar metin tabanlı Image tanımları ile birlikte oluşturulabilir. Oluşturulan bir container Docker Registery üzerinden başkaları ile paylaşılabilir.

Docker aşağıdaki şekilde görüldüğü üzere client/server mimarisini kullanır. Docker client, docker daemonları ile konuşur. Aradaki  iletişim socket veya restful api üzerinden olabilir.

Docker deamon, hypervisor’ün tam karşılığına denk gelmektedir. Containerların birbirlerinden izole olarak çalışmasını sağlayıp, kaynak kullanımını ve dağıtımını yapar.

Docker client, kullanıcıların Docker Daemon ile konuşabilmesi için gerekli komut setini bulundurur. Docker deamon ile aynı makinada veya uzak bir makinada olabilir.

Docker Registery, yukarıda bahsettiğimiz gibi Docker Image’larının saklayıp  başka kullanıcıların public/private bir şekilde erişip kullanmasını sağlar. Image’lar Tag’lanarak etiketlenir böylece değişik versiyonlar yönetilebilir.

Docker, kısaca uygulamaların farklı platformlarda  aynı şekilde çalışmasını sağlayarak bir standart oluşturur ve kaynakların daha verimli kullanılmasını sağlar.