Docker’ın tarihçesini anlatmak istemem ama 2014 yılından çıkan açık kaynak kodlu birçok bölümü Go, Python dilleri ile yazılmış bir proje olduğunu da belirtmek isterim. İlk çıktığında amacı hantal sanal makinalar yerine daha çok uygulama bazlı taşınabilir parçacıklar haline getirmekti. Aynı zamanda sanal bir makina üzerinde bir donanım ataması yaptığınız zaman o donanım parçası tamamı ile veya en azından çoğu o sanal makinaya ait oluyor bu da gereksiz bir şekilde donanımızın harcanmasına neden oluyor.

Docker ile birlikte taşınabilir bir formata getirildi uygulamalar ve bu uygulamaların adına Container dendi. Containerlar temelinde Linux kerneli ile çalışan işletim sistemlerinde oluştuğundan herhangi bir servisi çalıştırabilir. Örneğin Apache HTTPd; Alpine Linux versiyonu tam tamına 29 Megabyte.

Özetlemek gerekirsek Docker bize containerlarımızı yönetmemizi sağlayan bir motor. Peki nasıl bir şeye benziyor?

Containers VS Virtual Machines

Geleneksel sanal makinalara ilk önce bakarsak (sol) önce her bir uygulamanın bir misafir işletim sistemi var. Bu da demek oluyor ki biz A uygulamasından bir tane daha oluşturmamız için (yani A’) misafir işletim sisteminin tamamının klonunu almamız lazım. Burada da şu tip sorunlar ile karşılaşabilirsiniz.

  • Kısa zamanda birden fazla aynı uygulama ihtiyacınız olması
  • Uygulama veya işletim sistemi güncelemesi uygulanması

Diğer elden Docker’a bakıcak (sağ) olursak herhangi bir işletim sistemi ile uğraştığımızı söyliyemeyiz çünkü biz burada her bir uygulamızı bir container ile temsil ediyoruz.

Containerlar birbirinden bağımsız; ama işletim sistemlerini ve yazılım kütüphanelerini paylaşırlar.

Böylelikle çok küçük bir donanım veya alan ile birden fazla uygulama ve o uygulamanın birden fazla kopyasını çalıştırmamız mümkün olucak.