Günümüzde işletmeler büyük bir dönüşüm halindeler. İşletemler, 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ğlar.
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ğ, depolama 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.