Docker platformu için, yazılım geliştiren kişiler ile sistemci kişiler için geliştirilmiş olan ve açık kaynaklı olan bir sanallaştırma platformu diyebiliriz. Docker ile Linux, MacOSX ve Windows üstünde Windows ve Linux sanal makineler (containerler) çalıştırılabilir. Bu platform aracılığı ile web sistemlerinin kurulumu, testi ve de dağıtımı kolayca gerçekleştirilir. Taşıdığı özellikler içinde en önemli olan özelliği de “Benim bilgisayarımda çalışırken acaba niçin sunucuda çalışmadı?” sorununa açıklama getiriğ ortadan kaldırıyor olmasıdır.
Docker platformunun sanallaştırma yapısı, bildiğimiz sanal makinelerden (Vmware, VirtualBo ve benzeri) farklı olacak şekilde Hypervisor katmanına sahip bir yapı değildir. Bunun yerine Docker Engine üstünden konak işletim sistemlerine erişim sağlanmakta ve de sistem araçlarını paylaşımlı şekilde kullanmaktadır. Bu sayede klasik VM’lere nazaran sistem kaynağını daha az olarak tüketir.
Docker platformu, LXC sanallaştırma mekanizmasının üstüne kuruludur. Bir Docker imajının çalıştırıldığı birimler container denilen birimlerdir diyebiliriz. Bir makinede makinenin gücüne bağlı kalarak binlerce sayıda docker containerı çalışabilir. Container imajları, ortak sistem dosyaları paylaşmaktadır. Dolayısı ile disk alanından da tasarruf edilmektedir. Uygulama containerları ortak exe (bin) ve kütüphaneleri kullanır. Ancak klasik olan sanal makine sistemlerinde her uygulama için ayrı bir işletim sistemi ile kütüphane dosyası ayrılmak zorundadır.
Docker platformu, yazılımların kurulu olan son hâllerinin imajının alınarak tekrar kullanılabilmesini sağlayan bir platformdur. Bu imajların bir kere oluşturulup diğer sunuculara da gönderimi sağlanabilir ya da her bir sunucuda farklı farklı imajlar ile oluşturulabilir. Dockerfile adı verilmiş talimat dosyalarına bakılarak her bir sunucu aynı imaj ile yeniden inşa edilebilir. Böylelikle manuel olarak ekstra bir müdahalede bulunmak gerekmez.
Docker vs Klasik VM
VM’ler her çalışan örneği için full şekilde bir işletim sistemine sahiptir. Docker da hem konak işletim sistemi kütüphanelerini paylaşımlı şekilde kullanır hem de full işletim sisteminin yerine boyut olarak küçültülen imajları kullanılır. Ancak bu durum Docker platformunu sistem kaynak tüketim dostu yapar iken izolasyon seviyesini düşürmektedir. Bunlar ile birlikte aşağıda verilen karşılaştırmalar da yapılabilir.
KIYAS TÜRÜ |
DOCKER |
VM |
OS |
Küçültülmüş işletim sistemi imajı |
Tam işletim sistemi |
İzolasyon |
Daha küçük |
Yüksek |
Çalışır hâle gelmesi |
Saniye |
Dakika |
Versiyonlama |
Yüksek |
Yok |
Kolay paylaşılabilirlik |
Yüksek |
Düşük |
Her iki sanallaştırma yaklaşımının da birbirleri ile kıyasları yapıldığında avantajları ve dezavantajları görüldüğü üzere mevcuttur. Ancak, Docker platformunun tarafından bakıldığı zaman birtakım avantajların dezavantajlara göre çok daha kritik olduğunu söylemek mümkün hâle gelir.
Bunların başında da Docker platformunun daha kolay çalışan bir sistem olması geliyor. Docker, Hypervisor kullanmadığı için ve de konak sisteme yakın çalıştığı için saniyeler içerisinde çalışabilir. Bir diğeri de Docker platformunun versiyonlamaya olan yatkınlığıdır. Docker’ın özellikleri içerisinde en vurucu olan özelliklerinden birisi versiyonlanabilmesi özelliğidir. Docker, kullanmış olduğu işletim sistemi imajlarının değişik hâllerinin kayıt altında tutulabilmesi imkânını sağlar. Bu durum da hazırlanmış olan imajların kullanıcılar arasında paylaşılabilmesine kapı aralar. Başka bir özelliği de paylaşılabilirlik özelliğidir. Kullanıcılar ya da dağıtıcılar tarafınca hazırlanmış olan işletim sistemi imajları, merkezi olan sunuculara gönderilebilir ve de aynı zamanda diğer kullanıcılar tarafından da bu merkezi sunucular üzerinden elde edilebilir.
Containerların bir tek işletim sisteminde çalışıyor olması akıllara güvenlik sorununu getirir. Docker bu konuya da yazılımsal birtakım çözümler getirmiştir. Container içinde çalışmakta olan uygulamalar bir başka container içindeki uygulamayı aksi bir hâl belirtilmedikçe etkileyemezler ve göremezler. Başka bir deyişle izoledir denilebilir.