Docker nedir? Konteyner devriminin kıvılcımı

Docker, işletim sistemi çekirdeğinin ortak kullanımını sağlayan, ancak başka türlü birbirlerinden izole olarak çalışan küçük ve hafif yürütme ortamları gibi kapsayıcılara dayalı uygulamalar oluşturmak için bir yazılım platformudur . Bir süredir kapsayıcılar bir süredir var olsa da, 2013'te başlatılan açık kaynaklı bir proje olan Docker, teknolojinin popülerleşmesine yardımcı oldu ve  bulutta yerel olarak bilinen yazılım geliştirmede kapsayıcı ve mikro hizmetlere yönelik eğilimin ilerlemesine yardımcı oldu. geliştirme.

Kaplar nedir?

Modern yazılım geliştirmenin amaçlarından biri, uygulamaları aynı ana bilgisayarda veya kümede birbirinden izole tutmaktır, böylece birbirlerinin işlemine veya bakımına gereksiz yere müdahale etmesinler. Çalışmaları için gerekli olan paketler, kitaplıklar ve diğer yazılım bileşenleri sayesinde bu zor olabilir. Bu soruna bir çözüm , aynı donanım üzerindeki uygulamaları tamamen ayrı tutan ve yazılım bileşenleri arasındaki çatışmaları ve donanım kaynakları için rekabeti en aza indiren sanal makineler olmuştur . Ancak sanal makineler hantaldır - her biri kendi işletim sistemini gerektirir, bu nedenle genellikle gigabayt boyutundadır - ve bakımı ve yükseltmesi zordur.

Buna karşılık konteynerler , uygulamaların yürütme ortamlarını birbirinden izole eder, ancak temeldeki işletim sistemi çekirdeğini paylaşır. Genellikle megabayt cinsinden ölçülürler, sanal makinelerden çok daha az kaynak kullanırlar ve neredeyse anında başlarlar. Aynı donanım üzerinde çok daha yoğun bir şekilde paketlenebilirler ve çok daha az çaba ve ek yük ile toplu halde yukarı ve aşağı döndürülebilirler . Kapsayıcılar, yazılım bileşenlerini modern bir kuruluşta ihtiyaç duyulan uygulama türleri ve hizmet yığınlarıyla birleştirmek ve bu yazılım bileşenlerini güncellemek ve bakımını yapmak için oldukça verimli ve oldukça ayrıntılı bir mekanizma sağlar.

Liman işçisi

Docker nedir?

Docker, kapsayıcılar ve kapsayıcı tabanlı uygulamalar oluşturmayı kolaylaştıran açık kaynaklı bir projedir. Başlangıçta Linux için oluşturulan Docker, artık Windows ve MacOS'ta da çalışıyor. Docker'ın nasıl çalıştığını anlamak için, Docker ile konteynerleştirilmiş uygulamalar oluşturmak için kullanacağınız bazı bileşenlere bir göz atalım.

Dockerfile

Her Docker konteyneri bir Dockerfile ile başlar . Dockerfile, bir Docker görüntüsü oluşturma talimatlarını içeren, anlaşılması kolay bir sözdiziminde yazılmış bir metin dosyasıdır (birazdan daha fazlası). Dockerfile, diller, çevresel değişkenler, dosya konumları, ağ bağlantı noktaları ve ihtiyaç duyduğu diğer bileşenlerle birlikte konteynerin temelini oluşturacak işletim sistemini ve tabii ki biz onu çalıştırdığımızda konteynerin gerçekte ne yapacağını belirtir.

ITNext'teki Paige Niedringhaus, Dockerfile'ın sözdiziminin iyi bir dökümüne sahip.

Docker görüntüsü

Dockerfile'ınızı yazdıktan sonra, Dockerfile'ı temel alan buildbir imaj oluşturmak için Docker yardımcı programını çağırırsınız. Dockerfile, buildgörüntünün nasıl yapılacağını söyleyen talimatlar kümesiyken, Docker görüntüsü, konteynerin hangi yazılım bileşenlerinin nasıl çalıştırılacağına ilişkin özellikleri içeren taşınabilir bir dosyadır. Bir Dockerfile muhtemelen çevrimiçi depolardan bazı yazılım paketlerinin alınmasıyla ilgili talimatlar içereceğinden, uygun sürümleri açıkça belirtmeye dikkat etmelisiniz, aksi takdirde Dockerfile'ınız ne zaman çağrıldığına bağlı olarak tutarsız görüntüler üretebilir. Ancak bir görüntü oluşturulduktan sonra statiktir. Codefresh, bir görüntünün nasıl oluşturulacağına daha ayrıntılı bir bakış sunar.

Docker çalıştırma

Docker'ın runyardımcı programı, aslında bir konteyneri başlatan komuttur. Her kap bir görüntünün bir örneğidir . Kapsayıcılar geçici ve geçici olacak şekilde tasarlanmıştır, ancak durdurulabilir ve yeniden başlatılabilir, bu da kapsayıcıyı durdurulduğu zamanki duruma getirir. Ayrıca, aynı görüntünün birden fazla kapsayıcı örneği aynı anda çalıştırılabilir (her bir kabın benzersiz bir adı olduğu sürece). Kod İnceleme, runsize nasıl çalıştığına dair bir fikir vermek için komuta ilişkin farklı seçeneklere ilişkin harika bir döküm içerir .

Docker Hub

Konteynerler oluşturmak kolay olsa da, görsellerinizin her birini sıfırdan oluşturmanız gerektiği fikrine kapılmayın. Docker Hub, açık kaynaklı projelerden ve yazılım satıcılarından resmi Docker görüntülerini ve genel halktan resmi olmayan görüntüleri bulabileceğiniz, kapsayıcıları paylaşmak ve yönetmek için bir SaaS deposudur. Yararlı kod içeren konteyner görsellerini indirebilir veya kendinizinkini yükleyebilir, bunları açık bir şekilde paylaşabilir veya bunun yerine özel yapabilirsiniz. Dilerseniz yerel bir Docker kaydı da oluşturabilirsiniz. (Docker Hub, geçmişte, içine yerleştirilmiş arka kapılarla yüklenen görüntülerle ilgili sorunlar yaşamıştı.)

Docker Engine

Docker Engine, kapsayıcıları oluşturan ve çalıştıran temel istemci-sunucu teknolojisi olan Docker'ın temelidir. Genel olarak konuşursak, biri Docker'ı genel olarak söylediğinde ve şirket veya genel proje hakkında konuşmadığında, Docker Engine'i kastediyor. Sunulan iki farklı Docker Engine sürümü vardır: Docker Engine Enterprise ve Docker Engine Community.

Docker Community Edition

Docker, Enterprise Edition'ı 2017'de piyasaya sürdü , ancak Docker Community Edition olarak yeniden adlandırılan orijinal teklifi, açık kaynaklı ve ücretsiz olarak kaldı ve süreçte herhangi bir özellik kaybetmedi. Bunun yerine, düğüm başına yıllık 1.500 ABD doları olan Enterprise Edition, küme ve görüntü yönetimi için kontroller ve güvenlik açığı izleme dahil olmak üzere gelişmiş yönetim özellikleri ekledi. BoxBoat blogu, sürümler arasındaki farkların bir özetini içerir.

Docker konteyner dünyasını nasıl fethetti

Belirli bir işlemin, işletim ortamının geri kalanından bir dereceye kadar izolasyonla çalıştırılabileceği fikri, onlarca yıldır BSD ve Solaris gibi Unix işletim sistemlerine yerleştirilmiştir. Orijinal Linux kapsayıcı teknolojisi LXC, tek bir ana bilgisayarda birden çok yalıtılmış Linux sistemini çalıştırmak için işletim sistemi düzeyinde bir sanallaştırma yöntemidir. LXC, iki Linux özelliğiyle mümkün olmuştur: bir dizi sistem kaynağını saran ve bu sürece adanmış gibi görünmelerini sağlamak için onları bir işleme sunan ad alanları; ve bir işlem grubu için CPU ve bellek gibi sistem kaynaklarının izolasyonunu ve kullanımını yöneten cgroups.

Kapsayıcılar, uygulamaları işletim sistemlerinden ayırır; bu, kullanıcıların temiz ve minimum bir Linux işletim sistemine sahip olabileceği ve diğer her şeyi bir veya daha fazla yalıtılmış kapta çalıştırabileceği anlamına gelir. Ve işletim sistemi kapsayıcılardan soyutlandığı için, kapsayıcı çalışma zamanı ortamını destekleyen herhangi bir Linux sunucusunda bir kapsayıcıyı taşıyabilirsiniz.

Docker, konteynerleri daha taşınabilir ve kullanımı esnek hale getiren LXC'de birkaç önemli değişiklik yaptı. Docker kapsayıcılarını kullanarak, bir iş yükünü sanal makineler kullanarak yapabileceğinizden çok daha hızlı ve kolay bir şekilde dağıtabilir, çoğaltabilir, taşıyabilir ve yedekleyebilirsiniz. Docker, kapsayıcıları çalıştırabilen tüm altyapılara bulut benzeri esneklik getirir. Docker'ın kapsayıcı görüntü araçları da LXC'ye göre bir ilerlemeydi ve bir geliştiricinin görüntü kitaplıkları oluşturmasına, birden çok görüntüden uygulamalar oluşturmasına ve bu kapsayıcıları ve uygulamaları yerel veya uzak altyapıda başlatmasına olanak tanıdı.

Docker Compose, Docker Swarm ve Kubernetes

Docker ayrıca, konteynerler arasındaki davranışları koordine etmeyi ve böylece konteynerleri birbirine bağlayarak uygulama yığınları oluşturmayı kolaylaştırır . Docker Compose, çok kapsayıcılı uygulamaları geliştirme ve test etme sürecini basitleştirmek için Docker tarafından oluşturuldu. Bu, Docker istemcisini anımsatan, uygulamaları birden çok kapsayıcıdan bir araya getirmek ve bunları tek bir ana bilgisayarda birlikte çalıştırmak için özel olarak biçimlendirilmiş bir tanımlayıcı dosya alan bir komut satırı aracıdır. (Daha fazla bilgi edinmek için Docker Compose eğitimine göz atın.)

Bu davranışların daha gelişmiş sürümleri - kapsayıcı düzenleme adı verilir - Docker Swarm ve Kubernetes gibi diğer ürünler tarafından sunulur. Ancak Docker, temel bilgileri sağlar. Swarm, Docker projesinden büyümüş olsa da, Kubernetes tercih edilen fiili Docker düzenleme platformu haline geldi .

Docker avantajları

Docker konteynerleri, geleneksel muadillerine göre montajı, bakımı ve taşınması daha kolay olan kurumsal ve iş kolu uygulamaları oluşturmanın bir yolunu sağlar. 

Docker kapsayıcıları yalıtımı ve azaltmayı etkinleştirir

Docker kapsayıcıları, uygulamaları yalnızca birbirinden değil, temeldeki sistemden de izole tutar. Bu yalnızca daha temiz bir yazılım yığını yapmakla kalmaz, aynı zamanda belirli bir kapsayıcıya alınmış uygulamanın sistem kaynaklarını (CPU, GPU, bellek, G / Ç, ağ oluşturma vb.) Nasıl kullandığını belirlemeyi kolaylaştırır. Ayrıca, verilerin ve kodun ayrı tutulmasını sağlamayı da kolaylaştırır. (Aşağıdaki "Docker kapsayıcıları durum bilgisiz ve değişmezdir" konusuna bakın.)

Docker kapsayıcıları taşınabilirliği etkinleştirir

Bir Docker konteyneri, konteynerin çalışma zamanı ortamını destekleyen herhangi bir makinede çalışır. Uygulamaların ana işletim sistemine bağlanması gerekmez, bu nedenle hem uygulama ortamı hem de temeldeki işletim ortamı temiz ve minimum düzeyde tutulabilir.

Örneğin, Linux için bir MySQL kapsayıcısı, kapsayıcıları destekleyen çoğu Linux sisteminde çalışır. Uygulama için tüm bağımlılıklar tipik olarak aynı kapta sunulur.

Hedef sistem Docker'ı ve onunla birlikte kullanılabilecek üçüncü taraf araçlardan herhangi birini desteklediği sürece, konteyner tabanlı uygulamalar şirket içi sistemlerden bulut ortamlarına veya geliştiricilerin dizüstü bilgisayarlarından sunuculara kolayca taşınabilir. Kubernetes (aşağıdaki "Docker kapsayıcıları düzenleme ve ölçeklemeyi kolaylaştırır" konusuna bakın).

Normalde Docker kapsayıcı görüntüleri belirli bir platform için oluşturulmalıdır. Örneğin bir Windows konteyneri Linux'ta çalışmayacaktır ve bunun tersi de geçerlidir. Önceden, bu sınırlamayı aşmanın bir yolu, gerekli işletim sisteminin bir örneğini çalıştıran bir sanal makine başlatmak ve kapsayıcıyı sanal makinede çalıştırmaktı.

Ancak, Docker ekibi beri daha zarif bir çözüm denilen icat etti  manifestolar birden fazla işletim sistemleri için resimler aynı görüntüde yan-yana paketlenmiş izin. Manifestolar hala deneysel olarak kabul ediliyor, ancak konteynerlerin nasıl bir çapraz platform uygulama çözümü olabileceği kadar ortamlar arası bir çözüm haline gelebileceğine dair ipuçları veriyorlar. 

Docker kapsayıcıları birleştirilebilirliği etkinleştirir

Çoğu iş uygulaması, bir yığın halinde düzenlenmiş birkaç ayrı bileşenden oluşur - bir web sunucusu, bir veritabanı, bir bellek içi önbellek. Kaplar, bu parçaların kolayca değiştirilebilen parçalarla işlevsel bir birim halinde oluşturulmasını mümkün kılar. Her parça farklı bir kap tarafından sağlanır ve diğerlerinden bağımsız olarak bakımı yapılabilir, güncellenebilir, değiştirilebilir ve değiştirilebilir.

Bu, esasen uygulama tasarımının mikro hizmetler modelidir. Mikro hizmetler modeli, uygulama işlevselliğini ayrı, bağımsız hizmetlere bölerek geleneksel geliştirme süreçlerini ve esnek olmayan monolitik uygulamaları yavaşlatmak için bir panzehir sunar. Hafif ve taşınabilir kapsayıcılar, mikro hizmet tabanlı uygulamalar oluşturmayı ve sürdürmeyi kolaylaştırır.

Docker kapsayıcıları düzenleme ve ölçeklemeyi kolaylaştırır

Konteynerler hafif olduğundan ve çok az yük getirdiklerinden, belirli bir sistemde çok daha fazlasını başlatmak mümkündür. Ancak kapsayıcılar, bir uygulamayı sistem kümeleri arasında ölçeklendirmek ve talepteki ani artışları karşılamak veya kaynakları korumak için hizmetleri artırmak veya azaltmak için de kullanılabilir.

Kapsayıcıları devreye alma, yönetme ve ölçeklendirmeye yönelik araçların en kurumsal düzeydeki sürümleri, üçüncü taraf projeler aracılığıyla sağlanır. Bunların başında, kapsayıcıların nasıl dağıtıldığını ve ölçeklendiğini, aynı zamanda birbirlerine nasıl bağlandıklarını, yük dengelemelerini ve yönetildiklerini otomatikleştiren bir sistem olan Google'ın Kubernetes'i var. Kubernetes, karmaşık uygulama yığınlarının isteğe bağlı olarak oluşturulabilmesi ve yönetilebilmesi için çoklu kapsayıcı uygulama tanımları veya "Helm grafikleri" oluşturma ve yeniden kullanma yolları da sağlar.

Docker ayrıca, daha az talepkar durumlar için hala kullanılan kendi yerleşik düzenleme sistemi Swarm modunu da içerir. Bununla birlikte, Kubernetes varsayılan tercihlerden biri haline geldi; aslında Kubernetes, Docker Enterprise Edition ile paketlenmiştir.

Docker uyarıları

Konteynerler pek çok sorunu çözer, ancak her şeyi çözmezler. Bazı eksiklikleri tasarımdan kaynaklanırken, diğerleri tasarımlarının yan ürünleridir.

Docker kapsayıcıları sanal makineler değildir

İnsanların konteynerlerle yaptığı en yaygın kavramsal hata, onları sanal makinelerle eşitlemektir. Bununla birlikte, konteynerler ve sanal makineler farklı izolasyon mekanizmaları kullandıklarından, belirgin şekilde farklı avantajları ve dezavantajları vardır.

Sanal makineler, kendi işletim sistemi örneğinde çalıştıkları için süreçler için yüksek derecede yalıtım sağlar. Bu işletim sisteminin de ana bilgisayarda çalıştırılanla aynı olması gerekmez. Bir Windows sanal makinesi, bir Linux hiper yöneticisinde çalışabilir ve bunun tersi de geçerlidir.

Konteynerler, aksine, ana bilgisayar işletim sisteminin kaynaklarının kontrollü bölümlerini kullanır; birçok uygulama aynı işletim sistemi çekirdeğini yüksek düzeyde yönetilen bir şekilde paylaşır. Sonuç olarak, kapsayıcıya alınmış uygulamalar sanal makineler kadar tamamen izole edilmez, ancak iş yüklerinin büyük çoğunluğu için yeterli yalıtım sağlarlar.

Docker kapsayıcıları çıplak metal hız sağlamaz