Docker
Docker
Docker nedir?
Docker, açık kaynak kodlu bir konteynerleştirme platformudur. Docker, geliştiricilerin, uygulamaları konteynerler içinde paketlemelerine olanak sağlar. Konteynerler, uygulama kaynak kodunu, işletim sistemi kitaplıkları ve bu kodu herhangi bir ortamda çalıştırmak için gereken bağımlılıklar ile birleştiren standart, yürütülebilir bileşenlerdir. Konteynerler, dağıtılmış uygulamaları sağlama işlemini basitleştirir ve kuruluşların bulut tabanlı geliştirme ve hibrit çoklu bulut ortamlarına geçmeleri nedeniyle giderek daha popüler hale gelmiştir.
Geliştiriciler, Docker olmadan da konteyner oluşturabilirler, ancak bu platform, konteynerleri oluşturmayı, devreye almayı ve yönetmeyi daha kolay ve daha güvenli hale getirir. Docker, esas olarak geliştiricilerin, tek bir API üzerinden basit komutlar ve iş tasarrufu sağlayan otomasyon kullanarak konteynerler oluşturmalarna, devreye almalarına, çalıştırmalarına, güncellemelerine ve durdurmalarına olanak tanıyan bir araç takımıdır.
Docker, aynı zamanda Docker'ın ticari sürümünü satan şirket olan Docker, Inc. (bağlantı IBM dışındadır) ve Docker, Inc.'in ve diğer birçok kuruluşun ve kişinin katkıda bulunduğu Docker açık kaynak kodlu projesini (bağlantı IBM dışındadır) de ifade eder.
Konteynerler nasıl çalışır ve neden bu kadar popülerdir?
Konteynerler, Linux çekirdeğinde yerleşik olan süreç yalıtımı ve sanallaştırma yetenekleriyle sağlanır. Bu yetenekler arasında, süreçler arasında kaynakları tahsis etmeye yönelik kontrol gruplarını (C grupları) ve bir sürecin diğer kaynaklara veya sistem alanlarına erişimini veya görünürlüğünü kısıtlamaya yönelik ad alanlarını içerir. Bunlar, bir hipervizörün, tek bir donanım sunucusunun CPU'sunun, belleğinin ve diğer kaynaklarının birden fazla sanal makine tarafından paylaşılmasına olanak tanımasıyla hemen hemen aynı şekilde, birden fazla uygulama bileşeninin, anasistem işletim sisteminin tek bir eşgörünümünün kaynaklarını paylaşmasına olanak tanır.
Sonuç olarak, konteyner teknolojisi; uygulama yalıtımı, uygun maliyetli ölçeklenebilirlik ve kaldırılabilirlik dahil olmak üzere, sanal makinelerin tüm işlevlerini ve avantajlarının yanı sıra başka önemli avantajlar sunar:
- Daha hafif: Sanal makinelerin aksine konteynerler, tüm işletim sistemi eşgörünümünün ve hipervizörün yükünü taşımaz; yalnızca kodu yürütmek için gerekli olan işletim sistemi süreçlerini ve bağımlılıklarını içerir. Konteyner boyutları, megabayt (bazı sanal makineler için gigabayta karşı) cinsinden ölçülür, donanım kapasitesinden daha iyi yararlanılır ve daha hızlı başlatma süreleri sağlanır.
- Daha yüksek kaynak verimliliği: Konteynerler sayesinde, aynı donanımda, sanal makineleri kullanarak çalıştırabileceğinizden birkaç kat daha fazla uygulama kopyası çalıştırabilirsiniz. Bu, bulut harcamalarınızı azaltabilir.
- Artırılmış geliştirici üretkenliği: Sanal makinelere kıyasla, konteynerlerin devreye alınması, sağlanması ve yeniden başlatılması daha hızlı ve daha kolaydır. Bu, konteynerleri, sürekli entegrasyon ve sürekli teslim (CI/CD) hatlarında kullanım için ideal hale getirir ve bunların, Çevik ve DevOps uygulamalarını kullanan geliştirme ekipleri için daha uygun olmalarını sağlar.
Konteyner kullanan şirketler, iyileştirilmiş uygulama kalitesi, pazar değişikliklerine daha hızlı yanıt verme ve çok daha fazlasını içeren diğer avantajları bildirmektedir. Bu interaktif araç ile daha fazla bilgi edinin:
Raporun tamamını yükleyin: Kuruluştaki konteynerler (PDF, 1,4MB)
Neden Docker'ı kullanmalısınız?
Docker, günümüzde “Docker” ve “konteynerler” terimlerinin birbirlerinin yerine kullanılacağı kadar popüler durumdadır. Ancak konteynerle ilgili ilk teknolojiler, Docker'ın 2013'te halka sunulmasından önce yıllarca, hatta on yıllarca (bağlantı IBM dışındadır) kullanılmaktaydı.
En önemlisi, 2008 yılında, LinuXContainers (LXC), Linux çekirdeğinde uygulanarak, tek bir Linux eşgörünümü için sanallaştırmayı tamamen etkinleştirdi. LXC günümüzde halen kullanılıyor olsa da, Linux çekirdeğini kullanan daha yeni teknolojiler mevcuttur. Modern, açık kaynak kodlu bir Linux işletim sistemi olan Ubuntu da bu yeteneği sağlar.
Docker, yerel Linux konteynerleştirme yeteneklerini, aşağıda belirtilenleri sağlayan teknolojilerle geliştirmiştir:
- İyileştirilmiş ve sorunsuz taşınabilirlik: LXC konteynerleri genellikle makineye özel yapılandırmalara başvururken, Docker konteynerleri, her tür masaüstü, veri merkezi ve bulut ortamında değişiklik yapılmadan çalışır.
- Daha da hafif ve daha alt seviyede ayrıntılandırılan güncellemeler: LXC sayesinde, birden fazla süreç, tek bir konteyner içinde birleştirilebilir. Docker konteynerlerde, her konteynerde yalnızca bir süreç çalışabilir. Bu, güncelleme veya onarım için parçalarından biri kaldırıldığında çalışmaya devam edebilen bir uygulama oluşturmayı mümkün hale getirir.
- Otomatik konteyner oluşturma: Docker, bir konteyneri, uygulama kaynak koduna dayalı olarak otomatik biçimde oluşturabilir.
- Konteyner sürümü oluşturma: Docker, bir konteyner görüntüsünün sürümlerini izleyebilir, önceki sürümlere geri dönebilir ve bir sürümü kimin, nasıl oluşturduğunu izleyebilir. Hatta yalnızca mevcut bir sürüm ile yeni bir sürüm arasındaki deltaları yükleyebilir.
- Konteynerin yeniden kullanımı: Mevcut konteynerler, esas olarak, yeni konteynerler oluşturmak için şablonlar gibi temel görüntüler olarak kullanılabilir.
- Paylaşılan konteyner kitaplıkları: Geliştiriciler, kullanıcının katkıda bulunduğu binlerce konteyneri içeren açık kaynak kodlu bir kayıt defterine erişebilir.
Günümüzde Docker konteynerleştirmesi, Microsoft Windows sunucusuyla da çalışır. Ayrıca çoğu bulut sağlayıcısı, geliştiricilerin Docker ile konteynerli uygulamaları oluşturmalarına, sevk etmelerine ve çalıştırmalarına yardımcı olacak belirli hizmetler sunar.
Bu nedenlerden ötürü, Docker kullanımı hızla artmıştır ve artmaya devam etmektedir. Bu yazıda, Docker Inc., her ay 11 milyon geliştirici ve 13 milyar konteyner görüntüsüne ilişkin yükleme işlemi rapor etmektedir (bağlantı IBM dışındadır).
Docker araçları ve terimleri
Docker'ı kullanırken karşılaşacağınız bazı araçlar ve terimler arasında aşağıda belirtilenler yer alır:
DockerFile
Her Docker konteyneri, Docker konteyner görüntüsünün nasıl oluşturulacağına ilişkin yönergeleri içeren basit bir metin dosyasıyla başlar.DockerFile, Docker görüntü oluşturma sürecini otomatikleştirir. Bu, esas olarak, görüntüyü birleştirmek için Docker Engine'in çalıştıracağı komut satırı arayüzü (CLI) yönergelerinin bir listesidir.
Docker görüntüleri
Docker görüntüleri, yürütülebilir uygulama kaynak kodunun yanı sıra uygulama kodunun bir konteyner olarak çalışması için gereken tüm araçları, kitaplıkları ve bağımlılıkları içerir. Docker görüntüsünü çalıştırdığınızda, konteynerin bir eşgürünümü (veya birden fazla eşgürünümü) haline gelir.
Sıfırdan bir Docker görüntüsü oluşturmak mümkündür; ancak, çoğu geliştirici bunları ortak havuzlardan çeker. Tek bir temel görüntüden birden fazla Docker görüntüsü oluşturulabilir ve bunlar yığınlarının ortak noktalarını paylaşır.
Docker görüntüleri, katmanlardan oluşur ve her katman, görüntünün bir sürümüne karşılık gelir. Bir geliştirici görüntüde değişiklik yaptığında, yeni bir üst katman oluşturulur ve bu üst katman, görüntünün geçerli sürümü olarak önceki üst katmanın yerini alır. Önceki katmanlar, geri alma için veya başka projelerde yeniden kullanılmak üzere kaydedilir.
Docker görüntüsünden her konteyner oluşturulduğunda, konteyner katmanı adı verilen yeni bir katman daha oluşturulur. Dosyaların eklenmesi veya silinmesi gibi konteynerde yapılan değişiklikler, yalnızca konteyner katmanına kaydedilir ve yalnızca konteyner çalışırken mevcuttur. Birden fazla canlı konteyner eşgörünümünün, yalnızca tek bir temel görüntüden çalışabilmesi ve bunu yaparken ortak bir yığından yararlanması nedeniyle, bu yinelemeli görüntü oluşturma süreci, genel verimliliğin artmasını sağlar.
Docker konteynerleri
Docker konteynerleri, Docker görüntülerinin canlı, çalışan eşgörünümleridir. Docker görüntüleri salt okunur dosyalardır; öte yandan konteynerler, canlı, geçici, yürütülebilir içeriktir. Kullanıcılar, bunlarla etkileşim kurabilirler ve yöneticiler ise docker komutlarını kullanarak ayarlarını ve koşullarını değiştirebilirler.
Docker Hub
Kendisini "dünyanın en büyük kitaplığı ve konteyner görüntüsü topluluğu" olarak adlandıran Docker Hub (bağlantı IBM dışındadır), Docker görüntülerinden oluşan, genel kullanıma açık bir depodur. Ticari yazılım satıcı firmalarından, açık kaynak kodlu projelerden ve bireysel geliştiricilerden elde edilmiş 100.000'den fazla konteyner görüntüsüne sahiptir. Docker Hub, Docker, Inc. tarafından üretilmiş görüntüleri, Docker Trusted Registry'ye ait onaylı görüntüleri ve binlerce başka görüntüyü içerir.
Tüm Docker Hub kullanıcıları, görüntülerini istedikleri zaman paylaşabilirler. Bunlar aynı zamanda, her tür konteynerleştirme projesi için bir başlangıç noktası olarak kullanmak üzere Docker dosya sisteminden, önceden tanımlanmış temel görüntüleri yükleyebilirler.
Docker yardımcı programı
Docker yardımcı programı (daemon), Microsoft Windows veya Apple MacOS veya iOS gibi işletim sisteminizde çalışan bir hizmettir. Bu hizmet, Docker uygulamanızın kontrol merkezi olarak hareket ederek ve istemciden gelen komutları kullanarak, sizin için Docker görüntülerinizi oluşturur ve yönetir.
Docker kayıt defteri
Docker kayıt defteri (registry), docker görüntüleri için ölçeklenebilir, açık kaynak kodlu bir depolama ve dağıtım sistemidir. Kayıt defteri, tanımlama için etiketlemeyi kullanarak, havuzlarda bulunan görüntü sürümlerini takip etmenize olanak tanır. Bu, bir sürüm kontrol aracı olan git kullanılarak gerçekleştirilir.
Docker devreye alma ve düzenleme işlemi
Yalnızca birkaç konteyner çalıştırıyorsanız, uygulamanızı sektörün mevcut çalıştırma zamanı olan Docker Engine içinde yönetmek oldukça kolaydır. Ancak devreye alma işleminiz, binlerce konteyner ve yüzlerce hizmetten oluşuyorsa, bu iş akışını, bu amaca yönelik araçların yardımı olmadan yönetmek neredeyse imkansızdır.
Docker Compose
Tümü aynı anasistemde bulunan birden fazla konteynerdeki işlemlerden bir uygulama oluşturuyorsanız, uygulamanın mimarisini yönetmek için Docker Compose'u kullanabilirsiniz. Docker Compose, uygulamaya hangi hizmetlerin dahil edildiğini belirten ve konteynerleri tek bir komutla devreye alıp çalıştırabilen bir YAML dosyası oluşturur. Docker Compose'u kullanarak, aynı zamanda, depolama için kalıcı birimleri tanımlayabilir, temel düğümleri belirleyebilir ve hizmet bağımlılıklarını belgeleyebilir ve yapılandırabilirsiniz.
Kubernetes
Konteyner yaşam döngülerini daha karmaşık ortamlarda izlemek ve yönetmek için bir konteyner düzenleme aracına başvurmanız gerekir. Docker kendi düzenleme aracını (Docker Swarm) dahil ederken, çoğu geliştirici, bunun yerine Kubernetes'i seçer.
Kubernetes, Google'da dahili kullanım için geliştirilmiş bir projeden türetilen, açık kaynak kodlu bir konteyner düzenleme platformudur.Kubernetes, konteyner devreye alımı, güncellemeler, hizmet keşfi, depolama sağlama, yük dengeleme, durum izleme ve daha fazlası dahil olmak üzere, konteyner tabanlı mimarilerin yönetimiyle bütünleşik görevleri planlar ve otomatikleştirir. Buna ek olarak, Istio ve Knative dahil olmak üzere, Kubernetes için açık kaynak kodlu araç ekosistemi, kuruluşların, konteynerli uygulamalar için yüksek verimliliğe sahip bir Hizmet Olarak Sunulan Platform ve sunucusuz bilgi işlem için daha hızlı bir devreye alıma olanak tanır.
Kubernetes hakkında daha derin bir inceleme için, "Kubernetes Açıklaması" videosuna bakın:
Kubernetes Açıklaması (10:59)
Docker ve IBM Cloud
Kurumsal bir konteyner platformu, gelişmiş iş performansı ve operasyonel performans için ortamlarınızı birleştirmek üzere birden fazla genel ile özel bulut arasında düzenleme sağlar. Bu, açık hibrit bulut stratejisinin önemli bir bileşenidir ve satıcı firma bağımlılığından kaçınmanıza, iş yüklerini her yerde tutarlı bir şekilde oluşturmanıza ve çalıştırmanıza ve ayrıca, tüm BT'nizi optimize etmenize ve modernleştirmenize olanak tanır.
Bir sonraki adımı atın:
- Güncellemeleri, ölçeklemeyi ve sağlama işlemini otomatikleştirmek için IBM Cloud'un kurumsal ölçeğinden ve güvenliğinden yararlanan, yönetilen bir OpenShift hizmeti olan Red Hat OpenShift on IBM Cloud sayesinde, yüksek düzeyde erişilebilir, tam olarak yönetilen Kubernetes kümelerini devreye alın.
- Yönetilen, dağıtılmış bir bulut çözümü olan IBM Cloud Satellite sayesinde, herhangi bir satıcı firmadan şirket içi, edge bilgi işlem ve genel bulut ortamlarında uygulamaları devreye alın ve çalıştırın
- IBM hibrit bulut depolama çözümleri sayesinde, şirket içi ve genel bulut ortamlarında, konteyner destekli kurumsal depolamayı sorunsuz bir şekilde devreye alarak veri göllerinizi basitleştirin ve birleştirin
- IBM Cloud tarafından yönetilen hizmetler sayesinde, karmaşık hibrit BT yönetimini basitleştirin
Bir IBM Cloud hesabı ile hemen başlangıç yapın.
Kuruluşta bulunan konteynerler
Yeni IBM araştırması, konteyner ve Kubernetes kullanımının artan ivmesini belgeliyor.
Hibrit Bulutunuz için esnek, dirençli, güvenli BT
Konteynerler, iş yüklerini her yerden oluşturmanıza ve yönetmenize olanak tanıyan hibrit bulut stratejisinin bir parçasıdır.