Docker kapsayıcılarının kullanılması gereken durumlar

Tamamlandı

Öğrendiğimiz gibi Docker'ın kullanabileceğimiz çeşitli özellikleri vardır. Burada Docker'ın geliştirme ve operasyon ekiplerimize sağladığı avantajlara göz atacağız. Ayrıca Docker'ın en iyi seçenekler arasında yer almadığı birkaç senaryoyu da inceleyeceğiz.

Bu sayede Docker'ın kapsayıcılama stratejinize uygun olup olmadığına karar verebileceksiniz.

Daha önceki bölümlerden hatırlayacağınız üzere, sipariş izleme portalımızı geliştirip yayımlayan ekibimizin karşılaştığı çeşitli zorluklar vardır. Aşağıdakiler için bir çözüm arıyorlar:

  • Barındırma ortamlarımızı kolayca yönetin.
  • Yazılımımızı sunma şeklimizde sürekliliği garanti edin.
  • Sunucu donanımını verimli bir şekilde kullandığımızdan emin olun.
  • Uygulamalarımızın taşınabilirliğine izin verin.

Docker, bu zorlukların üstesinden gelmenizi sağlayabilecek bir çözümdür. Şimdi bu noktaya kadar incelediğimiz avantajlara bir göz atalım.

Docker'ın avantajları

Docker'ı kullanmaya başladığınızda kapsayıcılama ile birlikte gelen tüm avantajlara da sahip olursunuz.

Verimli donanım kullanımı

Kapsayıcılar, sanal makineye (VM) ihtiyaç duymadan çalışır. Öğrendiğimiz gibi kapsayıcı, dosya sistemi, ağ yönetimi, işlem zamanlaması ve bellek yönetimi gibi işlevler için konak çekirdeğine dayanır.

Diagram contrasting VM resource use versus Docker resource use.

Vm ile karşılaştırıldığında, vm içinde çalışan uygulamalara çekirdek işlevleri sağlamak için vm'nin yüklü bir işletim sistemi gerektirdiğini görebiliriz. VM işletim sistemi için de ayrıca disk alanı, bellek ve CPU süresi gerektiğini unutmayın. VM'yi ve ek işletim sistemi gereksinimlerini ortadan kaldırarak konak üzerindeki kaynakları serbest bırakabilir, daha fazla kapsayıcı çalıştırmak için kullanabilirsiniz.

Kapsayıcı yalıtımı

Docker kapsayıcılarının sunduğu güvenlik özellikleri, aynı konak üzerinde birden fazla kapsayıcının birbirini etkilemeden çalışmasını mümkün kılar. Daha önce de değindiğimiz gibi hem veri depolama alanı hem de ağ yapılandırmasını düzenleyerek kapsayıcıları yalıtabilir veya belirli kapsayıcılar arasında veri ve bağlantı paylaşımı oluşturabiliriz.

Şimdi bu özelliği VM kullanmayla karşılaştıralım.

Diagram that shows a physical host running multiple VMs.

İki VM çalıştıran bir fiziksel konağınız olduğunu düşünün. Yalıtarak birbirinden ayırmak istediğiniz üç uygulama var. İki uygulamayı birbirinden ayırmak için ilk uygulamayı VM1'e ve ikinci uygulamayı VM2'ye dağıtmaya karar verdik. Bu durumda üçüncü uygulamayı yüklemek için başka bir VM eklemeniz ve bu düzeni her yeni uygulama için devam ettirmeniz gerekir.

Uygulama taşınabilirliği

Kapsayıcılar neredeyse her yerde çalışır: masaüstleri, fiziksel sunucular, VM'ler ve bulutta. Bu çalışma zamanı uyumluluğu, kapsayıcılı uygulamaları farklı ortamlar arasında taşımayı kolaylaştırır.

Kapsayıcılar basit olduğundan, VM'ler gibi yavaş başlatma veya kapatma sürelerinden muzdarip olmazlar. Bu özellik, yeniden dağıtım ve ölçeği artırma veya azaltma gibi diğer dağıtım senaryolarını sorunsuz ve hızlı hale getirir.

Uygulama teslimi

Docker'da uygulama dağıtmak için kullanılan birim, kapsayıcılardır. Bu kavram, hem geliştirici hem de operasyon ekiplerimizin kullandığı standartlaştırılmış bir kapsayıcı biçimine sahip olduğumuzu güvence altına alır. Geliştiricilerimiz yazılım geliştirmeye odaklanabilir ve operasyon ekibi de yazılım dağıtma ve yönetmeye odaklanabilir.

Geliştirme ekibi bir derleme yayınladıktan sonra ilgili kapsayıcıyı dağıtım sisteminin her adımında kullanabilirsiniz. Kapsayıcılar sürekli tümleştirme için ideal adaylardır ve derlemeden üretime kadar olan süreyi hızlandırır.

Barındırma ortamlarını yönetme

Uygulama ortamı, kapsayıcı içinde yapılandırılır. Bu sayede operasyon ekibi, uygulama ortamını çok daha ayrıntılı bir şekilde yönetebilir. Ekibimiz işletim sistemi güncelleştirmelerini izleyebilir, güvenlik düzeltme eklerini bir kez uygulayabilir ve güncelleştirilmiş kapsayıcıyı gerektiği gibi dağıtabilir.

Ekip ayrıca diğer kapsayıcıları etkilemeden yüklenecek, güncelleştirilecek ve kaldırılacak uygulamaları yönetebilir. Her kapsayıcı diğerlerinden yalıtılmıştır ve kaynak sınırları diğer kapsayıcılardan bağımsızdır.

Bulut dağıtımları

Docker kapsayıcıları, Azure kapsayıcılama hizmetlerinin kullandığı varsayılan kapsayıcı mimarisidir ve diğer birçok bulut platformu da bunları destekler.

Örneğin Docker kapsayıcılarını Azure Container Instances, Azure Uygulaması Service ve Azure Kubernetes Services'e dağıtabilirsiniz. Bu seçeneklerin her biri farklı özellikler ve olanaklar sunar.

Örneğin Azure Container Instances ile altyapıyı yönetmekle uğraşmadan uygulamalarınızı tasarlama ve derleme süreçlerine odaklanabilirsiniz. Yönetmeniz gereken birden fazla kapsayıcınız varsa Azure Kubernetes hizmetini kullanarak büyük ölçekli kapsayıcı dağıtımlarını kolayca gerçekleştirebilir ve yönetebilirsiniz.

Docker kapsayıcılarının kullanılmaması gereken durumlar

Docker kapsayıcıları birçok avantaj sağlar, ancak kapsayıcıların tüm gereksinimlerinize uymayabileceğini unutmayın. Göz önünde bulundurmanız gereken birkaç nokta vardır.

Güvenlik ve sanallaştırma

Kapsayıcılar, belirli bir düzeyde yalıtım sağlar. Ancak kapsayıcılar aynı konak işletim sistemi çekirdeğini paylaştığından tek bir saldırı noktası oluşmasına neden olabilir.

Windows konakları, kapsayıcıyı hiper yönetici düzeyinde yalıtmak için amaca yönelik bir VM'nin kullanılabilmesi için ek bir yalıtım modeli sağlar. Bu mod Hyper-V yalıtım modu olarak adlandırılır ve kapsayıcılar ile kapsayıcı konağı arasında başka bir güvenlik katmanı ekler.

Tüm güvenlik yönlerini dikkate aldığımızdan emin olmak için depolama ve ağlar gibi yönleri de dikkate almalıyız. Örneğin tüm kapsayıcılar varsayılan olarak köprü ağını kullanır ve IP adresi üzerinden birbirine erişebilir.

Kapsayıcılama, tüm uygulamalar için kullanışlı olmayacaktır. Bu gibi durumlarda VM kullanmak daha mantıklı olabilir.

Hizmet izleme

Uygulamaları ve kapsayıcıları yönetmek, geleneksel VM dağıtımlarından daha karmaşıktır. Çalışan kapsayıcıların durumu hakkında bize bilgi veren günlüğe kaydetme özellikleri vardır, ancak kapsayıcı içindeki hizmetler hakkında daha ayrıntılı bilgi izlemek daha zordur.

Örneğin Docker, docker stats komutunu sunar. Bu komut kapsayıcı için CPU kullanımı yüzdesi, bellek kullanımı yüzdesi, diske yazılan G/Ç, gönderilen ve alınan ağ verileri ve atanan işlem kimlikleri gibi bilgileri döndürür. Bu bilgiler anında veri akışı olarak kullanışlıdır; ancak veriler depolanmadığından toplama yapılmaz. Belirli bir süre boyunca anlamlı veri yakalama için üçüncü taraf yazılım yüklememiz gerekir.