Docker Container'lar ve Container Cloud Services
Kapsayıcı, bir uygulama yazılımının tüm kodlarının ve bağımlılıklarının, bilgi işlem ortamlarında hızlı ve güvenilir bir şekilde çalışmasını sağlayan standart bir biçimde paketleyen bir paketleme biçimidir. Docker kapsayıcı kitaplıklar, sistem araçları, kod ve çalışma zamanı dahil olmak üzere bir uygulama yazılımını çalıştırmak için gereken her şeyi içeren popüler, hafif, bağımsız, yürütülebilir bir kapsayıcıdır. Docker ayrıca, geliştiricilerin kapsayıcıya alınmış uygulama yazılımlarını hızla oluşturmasına, test etmesine ve dağıtmasına olanak tanıyan bir yazılım platformudur.
Containers as a Service (CaaS) veya Kapsayıcı Hizmetleri, kapsayıcıların yaşam döngüsünü yöneten yönetilen bulut hizmetleridir. Kapsayıcı hizmetleri, kapsayıcıların çalışma zamanını düzenlemeye (başlatma, durdurma, ölçeklendirme) yardımcı olur. Kapsayıcı hizmetlerini kullanarak, uygulama yazılımı geliştirme ve dağıtım yaşam döngünüzü basitleştirebilir, otomatikleştirebilir ve hızlandırabilirsiniz.
Docker ve Container Services hızlı bir şekilde benimsendi ve son birkaç yılda muazzam bir başarı elde etti. 2013'te neredeyse bilinmeyen ve oldukça teknik bir açık kaynak teknolojisi olan Docker, artık birçok Oracle kurumsal ürünü için resmi olarak desteklenen standart hale getirilmiş bir çalışma zamanı ortamına dönüştü.
Docker'ı kim kullanır?
Docker, DevOps'a ve geliştiricilere fayda sağlamak için tasarlanmış açık bir uygulama yazılımı geliştirme çerçevesidir. Geliştiriciler Docker'ı kullanarak, uygulama yazılımlarını hemen hemen her yerde çalışabilen hafif, taşınabilir, kendi kendine yeten kapsayıcılar olarak kolayca oluşturabilir, paketleyebilir, gönderebilir ve çalıştırabilir. Kapsayıcılar, geliştiricilerin bir uygulama yazılımını tüm bağımlılıkları ile paketlemesine ve tek bir birim olarak dağıtmasına olanak tanır. Geliştiriciler, önceden oluşturulmuş ve kendi kendini sürdüren uygulama yazılımı kapsayıcıları sağlayarak, uygulama yazılımı koduna odaklanabilir ve temeldeki işletim sistemi veya dağıtım sistemi hakkında endişelenmeden kullanabilir.
Ek olarak, geliştiriciler bir Docker kapsayıcıda çalışmak üzere tasarlanmış binlerce açık kaynaklı kapsayıcı uygulama yazılımından yararlanabilir. DevOps ekipleri için Docker, sürekli entegrasyon ve geliştirme araç zincirlerine katkıda bulunur ve uygulama yazılımlarını dağıtmak ve yönetmek için sistem mimarilerinde ihtiyaç duydukları kısıtlamaları ve karmaşıklığı azaltır. Kapsayıcı düzenleme bulut hizmetlerinin kullanıma sunulmasıyla, herhangi bir geliştirici, kendi geliştirme ortamlarında yerel olarak kapsayıcıya alınmış uygulama yazılımları geliştirebilir ve ardından bu kapsayıcıya alınmış uygulama yazılımlarını, yönetilen Kubernetes hizmetleri gibi bulut hizmetlerinde üretimde taşıyabilir ve çalıştırabilir.
Docker ve Kubernetes
Linux kapsayıcılar 2008'den beri var, ancak 2013'te Docker kapsayıcıların ortaya çıkmasına kadar iyi bilinmiyorlardı. Docker kapsayıcıların ortaya çıkmasıyla birlikte, kapsayıcıya alınmış uygulamaların geliştirilmesi ve dağıtılmasına yönelik ilgi patlaması yaşandı. Kapsayıcıya alınmış uygulama yazılımlarının sayısı, birden çok sunucuya dağıtılan yüzlerce kapsayıcıyı kapsayacak şekilde büyüdükçe, bunların çalıştırılması daha karmaşık hale geldi. Yüzlerce kapsayıcıyı nasıl koordine ediyor, ölçeklendiriyor, yönetiyor ve planlıyorsunuz? Bu konuda size Kubernetes yardımcı olabilir. Kubernetes, Docker kapsayıcılarınızı ve iş yüklerinizi çalıştırmanıza olanak tanıyan açık kaynaklı bir düzenleme sistemidir. Birden çok sunucuya dağıtılan birden fazla kapsayıcıyı ölçeklendirmeye geçerken işletim karmaşıklıklarını yönetmenize yardımcı olur. Kubernetes motoru, uygulama yazılımı kapsayıcılarını barındırma altyapısı genelinde dağıtarak kapsayıcı yaşam döngüsünü otomatik olarak düzenler. Kubernetes, talebe bağlı olarak kaynakları hızla yukarı veya aşağı ölçeklendirebilir. Kapsayıcıların sağlığını sürekli olarak tedarik eder, planlar, siler ve izler.
Docker Temelleri
Docker'ın temel kavramları görüntüler ve kapsayıcılardır. Docker görüntüsü, yazılımınızı çalıştırmak için gereken her şeyi içerir: kod, bir çalışma zamanı (örneğin, Java Virtual Machine (JVM), sürücüler, araçlar, komut dosyaları, kitaplıklar, dağıtımlar ve daha fazlası.
Docker kapsayıcı, Docker görüntüsünün çalışan bir örneğidir. Bununla birlikte, tip 1 veya tip 2 hiper yönetici ile geleneksel sanallaştırmanın aksine, bir Docker kapsayıcı, ana bilgisayar işletim sisteminin çekirdeği üzerinde çalışır. Bir Docker görüntüsünde, Şekil 1'de gösterildiği gibi ayrı bir işletim sistemi yoktur.
Şekil 1
İzolasyon ve Sanallaştırma
Her Docker kapsayıcının kendi dosya sistemi, kendi ağ yığını (ve dolayısıyla kendi IP adresi), kendi işlem alanı ve CPU ile bellek için tanımlanmış kaynak sınırlamaları vardır. Bir Docker kapsayıcının bir işletim sistemini önyüklemesi gerekmediğinden, işlem anında başlar. Docker, sanallaştırmanın aksine izolasyonla (örneğin bir ana bilgisayar işletim sisteminin kaynaklarını ayırma) yani ana bilgisayar işletim sisteminin üstünde bir konuk işletim sistemi sağlamakla ilgilidir.VM ve Kubernetes - Dağıtım Altyapısı
Şekil 2
Artımlı Dosya Sistemi
Docker görüntüsünün dosya sistemi, yazma üzerine kopyalama semantiği ile katmanlıdır. Bu, devralma ve yeniden kullanımı mümkün kılar, kaynakları diske kaydeder ve artımlı görüntü indirmeye olanak tanır.
Şekil 2'de gösterildiği gibi, WebLogic dağıtımına sahip bir Docker görüntüsü Oracle Linux temel görüntüsüne, bir Java Development Kit (JDK) görüntüsüne, bir WebLogic görüntüsüne, bir Oracle WebLogic Server alan adlı bir görüntüye dayanabilir.
Docker Kayıt Defteri
Docker görüntülerinin oluşturulması kolayken ve geliştiriciler Docker görüntülerinin basitliğini ve taşınabilirliğini severken, binlerce Docker görüntüsünü yönetmenin çok zor olduğunu hızla keşfettiler. Docker Registry bu zorluğu ele alır. Docker Registry, Docker görüntülerini depolamanın ve dağıtmanın standart bir yoludur. Registry (Kayıt Defteri), izin verilen Apache lisansı altında açık kaynak tabanlı bir depodur.
Docker Registry, havuzunda depolanan Docker görüntülerinin erişim kontrolünü ve güvenliğini iyileştirmeye de yardımcı olur. Görüntülerin dağıtımını yönetir ve ayrıca uygulama yazılımı geliştirme iş akışlarıyla entegre edilebilir. Geliştiriciler kendi Docker Kayıt Registry'lerini kurabilir veya Docker Hub, Oracle Container Registry, Azure Container Registry gibi barındırılan bir Docker Registry hizmetini kullanabilir.
Docker Hub, Docker tarafından yönetilen, barındırılan bir Docker kayıt defteridir. Docker Hub yazılım satıcılarından, açık kaynak projelerinden ve topluluktan 100.000'den fazla kapsayıcı görüntüsüne sahiptir. Docker Hub; NGINX, Logstash, Apache HTTP, Grafana, MySQL, Ubuntu ve Oracle Linux gibi resmi depolardan yazılım ve uygulamaları içerir.
Bir kapsayıcı başlatırken, yerel olarak kullanılamıyorsa Docker varsayılan olarak ilgili görüntüyü genel Docker Hub'dan otomatik olarak çeker. Dahası, kendi görüntülerinizi de oluşturabilir ve bunları Docker Hub'a genel veya özel bir depoya aktarabilirsiniz.
Şekil 3
Mikro Hizmetler Çalışma Zamanı olarak Docker
Monolitik uygulama yazılımları daha küçük mikro hizmet parçalarına ayırma fikri, bugünlerde yazılım geliştiricileri arasında büyük ilgi görüyor.
Mikro hizmetler, bir süreç olarak bağımsız olarak konuşlandırılır, birbirleriyle iletişim kurmak için hafif protokoller kullanır ve her hizmet kendi verilerine sahiptir [7]. Mikro hizmetler merkezi olmayan bir yönetişim yaklaşımı izledikleri için, oldukça yüksek miktarda altyapı otomasyonu, otomatik testler, tam otomatik CD ardışık düzenleri ve yetenekli, çevik DevOps ekipleri gerektirir.
Bu mimari tarz hakkında hala çok fazla tartışma var, ancak mikro hizmetlere ayrıştırılmış bir uygulama yazılımının basitçe bir dizi işlem olarak çalıştırılabileceğini varsaymak saflık olur. Yalnızca birkaç gereksinimi belirtmek için, bir mikro hizmetin ana bilgisayardan bağımsız olması ve işletim sistemi düzeyinde izole edilmesi gerekir. Kaynak sınırları dahilinde çalışmalı, yukarı ve aşağı ölçeklendirilmeli, başarısız olursa yeniden başlatılmalı ve bir yazılım tanımlı ağ katmanı aracılığıyla keşfedilmeli ve diğer mikro hizmetlere bağlanmalıdır.
Bu nedenle, bir Docker kapsayıcıda bir mikro hizmet çalıştırmak, bu hedeflerin çoğuna ulaşmak için sizi mükemmel bir atlama noktasına getirir.
Docker—İki Önemli Boyut
Docker yazılımı oluşturma, gönderme ve çalıştırma şeklimizi iki farklı boyutta değiştirir:
- Uygulama yazılımlarını geliştirmeden üretime güvenilir bir şekilde alma sürecini geliştirir.
- Şirket içinden buluta geçmek için standart bir görüntü formatı sağlar.
Her iki boyut da aşağıdaki paragraflarda daha ayrıntılı olarak açıklanmıştır.
Docker Görüntüsü—Geliştirmeden Üretime
Tüm bağımlılıkları ile bir Docker görüntüsü oluşturmak "ama geliştirme makinemde işe yaradı" sorununu çözer. Temel fikir, bir Docker görüntüsünün Git gibi bir kaynak kod havuzundan bir derleme işlem hattı tarafından otomatik olarak oluşturulması ve başlangıçta bir geliştirme ortamında test edilmesidir. Bu değişmez görüntü daha sonra bir Docker kayıt defterinde saklanacaktır.
Şekil 4'te gösterildiği gibi, aynı görüntü diğer yük testleri, entegrasyon testleri, kabul testleri ve daha fazlası için kullanılacaktır. Her ortamda aynı görüntü kullanılacaktır. Bir üretim veritabanı için JDBC URL'si gibi küçük ancak gerekli çevresel olarak özel farklılıklar, ortam değişkenleri veya dosyalar şeklinde kapsayıcıya beslenebilir.
Şekil 4
İstatistikler, tüm mevcut Docker kullanım örneklerinin %65'inin geliştirme aşamasında olduğunu ve %48'inin sürekli entegrasyon için Docker kullandığını göstermektedir [5].
İşletme İçinden Buluta
Docker, genel bulutların benimsenmesini değiştirdi: Bir yandan, bir Docker görüntüsü ile tarihte ilk kez, her büyük bulut sağlayıcının yanı sıra şirket içinde de çalıştırılabilen ortak bir paket formatı bulunmaktadır. Docker kapsayıcılar, dizüstü bilgisayarımda Oracle Cloud'da çalıştıkları gibi çalışıyor.
Diğer yandan, Docker kapsayıcılar her büyük genel bulut üzerinde çalıştığından, genel bulutlara karşı uzun süredir var olan önyargının üstesinden gelmeye büyük katkı sağlarlar: satıcıya kilitlenme. Her büyük bulut sağlayıcı artık Docker'ı bir PaaS olarak sunuyor.
Docker Sürümleri—Temel Teknolojinin Olgunluğu
Docker sürümlerinin hızı, geleneksel kurumsal yazılımın yayın döngüsünden çok daha hızlıdır. Bazen Docker sürümlerinin yüksek hızı, Docker projesinin yeniliği ile birlikte Docker'ın güvenliği ve istikrarı hakkında endişeler uyandırmaktadır.
Docker ve komut satırı, Docker arka plan programı, API'si ve Docker Swarm, Docker Machine ve Docker Compose gibi araçların yalnızca son üç yılda gelişmesine rağmen, temeldeki çekirdek özellikleri neredeyse on yıldır her Linux çekirdeğinde mevcuttur.
Kapsayıcı teknolojisini erken benimseyenlerin önemli bir örneği Google'dır. Google, Docker ortalıkta olmadan önce Linux kapsayıcıları kullanıyordu. Ayrıca, Google her şeyi bir kapta çalıştırmaktadır. Google'ın haftada 2 milyar kapsayıcı başlattığı tahmin edilmektedir [3].
Kontrol Grupları ve Ad Alanları Geçmişi
Docker'ın kullandığı temel Linux çekirdeği özellikleri kontrol grupları ve ad alanlarıdır. 2008 yılında, daha önce Google geliştiricileri [1] tarafından yapılan çalışmalara dayalı olarak Linux çekirdeğine kontrol grupları tanıtıldı. Kontrol grupları bir dizi işletim sistemi işleminin kaynak kullanımını sınırlar ve hesaba katar.
Linux çekirdeği, işlemlerin sistem kaynaklarını birbirinden izole etmek için ad alanını kullanır. İlk ad alanı (bağlama ad alanı) 2002 gibi erken bir tarihte tanıtıldı.
Container Cloud Services
Bu makalenin ilk bölümü bazı önemli Docker kavramlarını açıkladı. Ancak, bir üretim ortamında bir uygulama yazılımını bir Docker kapsayıcıda çalıştırmak yeterli değildir.
Bir üretim ortamı kurmak ve bunu çalıştırmak için kapsayıcıları çalıştıracak donanım gerekir. Depolar ve küme yöneticileriyle birlikte Docker gibi yazılımlar kurulmalı, bu yazılımlar yükseltilmeli ve yamalanmalıdır. Birkaç Docker kapsayıcı ana bilgisayarlar arasında iletişim kuruyorsa, bir ağ oluşturulması gerekir. Başarısız olurlarsa kümelenmiş kapsayıcılar yeniden başlatılmalıdır. Ek olarak, birbirine bağlı bir dizi kapsayıcı, tek bir mantıksal uygulama yazılımı örneği kadar kolay bir şekilde konuşlandırılabilir olmalıdır. Bunun bir örneği, bir yük dengeleyici, birkaç web sunucusu, bir yönetici sunucusuna sahip bazı Oracle WebLogic Server örnekleri, bir yönetilen sunucu ve bir veritabanı olabilir. Kapsayıcıya alınmış uygulama yazılımlarını geniş ölçekte yönetmek için Kubernetes veya Docker Swarm gibi bir kapsayıcı düzenleme sistemi gerekir. Kubernetes gibi düzenleme sistemlerini dağıtmak, yönetmek ve çalıştırmak zor olabilir ve zaman alıcı olabilir.
Geliştiricilerin kapsayıcıya alınmış uygulama yazılımları oluşturmasını kolaylaştırmak ve bunları daha verimli hale getirmek için, bulut sağlayıcılar Kapsayıcı Bulut Hizmetleri (Container Cloud Services) veya Hizmet Olarak Kapsayıcılar [Containers as a Service (CaaS)] sunar. Container Cloud Services, geliştiricilerin ve operasyon ekiplerinin otomatik bir şekilde kapsayıcıların yaşam döngüsünü kolaylaştırmasına ve yönetmesine yardımcı olur. Genellikle Kubernetes kullanılarak oluşturulan bu düzenleme hizmetleri, DevOps ekiplerinin kapsayıcıya alınmış uygulama yazılımlarını uygun ölçekte yönetmesini ve çalıştırmasını kolaylaştırır. Oracle Container Engine for Kubernetes ve Azure Kubernetes Service, popüler kapsayıcı düzenleme yönetimli bulut hizmetlerinin iki örneğidir.
Oracle Container Engine for Kubernetes kapsayıcıya alınmış uygulama yazılımlarınızı bulutta dağıtmak için kullanabileceğiniz, tam olarak yönetilen, ölçeklenebilir ve yüksek düzeyde kullanılabilir bir hizmettir. Geliştirme ekibiniz bulut yerel uygulama yazılımlarını güvenilir bir şekilde derlemek, dağıtmak ve yönetmek istediğinde Container Engine for Kubernetes (bazen sadece OKE olarak kısaltılır) kullanın.
Oracle'dan Docker Görüntüleri—Aşağıda, Oracle ürünleri için Docker görüntüleri edinmeye veya oluşturmaya yönelik bazı kaynaklar bulunmaktadır. Docker görüntüleri için Oracle GitHub deposu, Oracle ticari ürünleri ve Oracle sponsorlu açık kaynaklı projeler için Docker görüntüleri oluşturmak üzere Dockerfiles ve örnekler içerir.
Docker Uygulamalı Laboratuvarı—Docker ile Kapsayıcılı Geliştirme
Referanslar
- Cgroups (Wikipedia)
- Linux Ad Alanları (Wikipedia)
- Google'daki HER ŞEY bir kapsayıcıda çalışır, Jack Clark
- Docker Hub 5 Milyar Çekişe Ulaştı
- Modern Yazılım Tedarik Zincirinin Evrimi, Docker Anketi 2016
- MOS Doküman Kimliği 2216342.1: Oracle DB için Docker Desteği
- Mikro Hizmetler, Martin Fowler
- Oracle Container Engine ve kayıt defteri demosu (3:13)
- Container Engine for Kubernetes Belgeleri