Her iki sanallaştırma teknolojisinin birbirlerine göre avantaj ve dezavantajları mevcuttur. Ancak, Docker yönünden bakıldığında bazı avantajlarıyla öne çıkmaktadır.
Sanal makineler işletim sistemine sahiptir. Docker ise imajları kullanır ayrıca konak işletim sistemi kütüphanelerini paylaşımlı olarak kullanır. Fakat bu durum, Docker’i sistem kaynak tüketim dostu yaparken, izolasyon seviyesini ise düşürmektedir. Docker teknolojisinin güvenliği açısından sıkıntılar doğurmaktadır.
Docker sanal makinelerden daha hızlıdır ve de uygulamaların daha hafif olması, uygulama yapısını güncelleyip paylaşma süreçlerini çok daha hızlı yapmaktadır.
Şekil 2. Sanal makinalarda fazladan ayrılan boş kalan alanlar ve Docker hafıza yönetimi
-Sanal makine dakikalar içinde açılır ve kullanıma hazır hale gelir.
-Hypervisor üzerinde yürütülür.
"" -Bir işletim sistemi için gereken boş alanlar hafızada yer almaktadır.
-Sanal makine işletim sistemi paylaşılmaz ve ana bilgisayar çekirdeğinde güçlü bir izolasyon vardır. -Dolayısıyla, Konteynerlere kıyasla daha güvenlidirler.
-Bir VM ile araçların kullanımı nispeten daha kolaydır.
-Her VM'nin ayrı bir işletim sistemi vardır
-Docker teknolojisi saniyeler içinde boot işlemini gerçekleştirir.
-Docker engine üzerinde yürütülür.
-Hafıza daha tasarruflu kullanılır.
-Sistemlerin izolasyonu için bir hüküm yoktur ve dolayısıyla olumsuzluklara daha yatkındır
-Dockers, hem üçüncü taraf hem de docker tarafından yönetilen araçlardan oluşan nispeten karmaşık bir kullanım mekanizmasına sahiptir.
-Her konteyner bir işletim sistemini paylaşabilir.
Güvenli Docker Kullanımında Dikkat Edilmesi Gerekenler
Docker ile açık depolardan konteyner imajları indirilebilir fakat bu konteynerlerin kim tarafından ve güvenilir olarak oluşturulup oluşturulmadığı bilinmemektedir. İndirilen imajda zararlı bir dosya barınabilir dolayısıyla imzalanmış imajların kullanılması gerekmektedir.
Bir konteynerde kaynak kısıtlaması yoktur. Bu durum varsayılan olarak gelmektedir. Hostun kaynaklarını zarar verecek şekilde kullanım gerçekleştirilerek saldırılar gerçekleştirilebilir. Dolayısıyla bellek ve CPU kullanım miktarı konteynerlerde ayarlanmalıdır.
Sunuculardaki bir konteynerde root kullanıcı ile işlem yapmak yerine, Dockerfile’ınızda bilinen bir UID ve GID ile bir kullanıcı oluşturarak ve işlemlerin bu kullanıcı ile yapılması önerilmektedir. Bu şekilde oluşturulan imajların, kaynaklara erişimi sınırlandırarak güvenli bir şekilde çalışması gerçekleştirilmiş olur.
Konteynerler arası gereksiz iletişimi engellenmesi güvenlik açısından diğer bir unsurdur. Her bir konteyner, aynı ana bilgisayar üzerindeki konteyner ağı boyunca tüm paketleri okuma potansiyeline sahiptir. Bu istenmeyen bir bilgi ifşasına yol açabilir. Bu nedenle, varsayılan ağ köprüsünün (network bridge) konteyner içi iletişimi kısıtlayacak şekilde yapılandırılmasını sağlayın. Ayrıca Dosya sistemini salt okunur hale getirin böylece saldırganın zararlı bir kod yazması veya diğer zararlı faaliyetleri engellenmiş olur.