Container (Konteyner) Teknolojisi Nedir?

Container (Konteyner) Teknolojisi Nedir?


Konteynerler, mevcut DevOps devriminin arkasındaki temel itici güçlerden biridir. Sanal makinelere (VM’ler) hafif, taşınabilir ve uygun maliyetli bir alternatif sunarken; modern uygulamaları paketlemek ve dağıtmak için daha basit ve daha kullanışlı bir yol sağlar.

Kapsayıcıların evrimindeki ilk adımlar, chroot komutunu kullanarak süreçleri izole etmenin bir yolunu sunan Unix V7’nin geliştirilmesiyle 1979’a kadar uzanır.

O zamandan beri teknoloji, 2000’lerde ortaya çıkan FreeBSD jails ve LXC gibi yeni uygulamalarla uzun bir yol kat etse de, benimseme başlangıçta oldukça yavaştı. Ancak 2013’te Docker’ın piyasaya sürülmesiyle her şey değişti. Platform, kapsayıcılı uygulamaların dağıtımını ve bakımını çok daha kolay hale getirdi ve sonuç olarak, container’ların kullanımı arttı.

Peki container tam olarak nedir? 

Container Nedir?

Container yani kapsayıcı, sanal makinelere (VM’ler) benzer bir rol oynayan bir uygulama dağıtım teknolojisidir. Tıpkı geleneksel sanallaştırma gibi, container’lar da uygulamalarınız için yalıtılmış ortamlar sağlar. Ancak, altyapı kaynaklarını bölmek için farklı bir yöntem kullanır.

VM’ler tam teşekküllü konuk işletim sistemlerini taklit etmek için bir hiper yönetici kullanırken, kapsayıcılar ana bilgisayar işletim sisteminin çekirdeğini diğer kapsayıcılarla paylaşır.

Ek olarak, tam gelişmiş bir işletim sistemini ortadan kaldırdıkları ve bunun yerine yalnızca uygulamanızın gerçekten ihtiyaç duyduğu yüklemeler, bağımlılıklar ve kod gibi kaynakları sağladıkları için iş yükleriniz için çok daha düzenli bir ortam sunar.

Container’lar ayrıca uygulamalarınızın altyapı ayak izini önemli ölçüde azaltabilir, VM’lerden daha iyi performans sunar ve daha hızlı durup başlayabilirler. Bu da onları dalgalı ölçeklendirme gereksinimlerine daha duyarlı hale getirir.

Konteynerler, Docker ve Kubernetes gibi konteynerleştirme teknolojisi ile birlikte birçok geliştiricinin araç setlerinde giderek yaygınlaşan bileşenlerdir. Konteynerleştirmenin amacı, özünde öngörülebilir ve yönetimi kolay bir şekilde farklı ortamlarda yazılım oluşturmak, paketlemek ve dağıtmak için daha iyi bir yol sunmaktır.

Kapsayıcılar, kapsayıcı özellikli herhangi bir ana bilgisayarda tutarlı bir şekilde çalışır, böylece geliştiriciler daha sonra tam üretim ortamlarına dağıtacakları aynı yazılımı yerel olarak test edebilir.

Konteynerler Nasıl Çalışır?

Konteynerlerin nasıl çalıştığını anlamak için kapsayıcıların sanal makinelerden nasıl farklı olduklarını anlamanız gerekir.

Kaynak: researchgate

Sanal Makineler vs Container’lar

Sanal makineler veya VM’ler, bir bilgisayarın donanımını ve kaynaklarını tamamen sanallaştırmanıza izin veren bir donanım sanallaştırma teknolojisidir. Ayrı bir konuk işletim sistemi, sanal makineyi, ana bilgisayar sisteminde çalışan işletim sisteminden tamamen ayrı olarak yönetir. Ana bilgisayar sisteminde, sanal makineleri başlatmak, durdurmak ve yönetmekten hiper yönetici adı verilen bir yazılım parçası sorumludur.

VM’ler, normal çalışma koşulları altında ana sistemi veya diğer VM’leri etkileyemeyen tamamen farklı bilgisayarlar olarak çalıştırıldığından, sanal makineler mükemmel yalıtım ve güvenlik sunar. Ancak, dezavantajları da vardır. Örneğin, tüm bir bilgisayarı sanallaştırmak, VM’lerin önemli miktarda kaynak kullanmasını gerektirir. Sanal makine, eksiksiz bir konuk işletim sistemi tarafından çalıştırıldığından, sanal makine sağlama ve önyükleme süreleri oldukça yavaş olabilir. Benzer şekilde, VM bağımsız bir makine olarak çalıştığından, yöneticilerin genellikle bireysel ortamları güncellemek ve çalıştırmak için altyapı benzeri yönetim araçlarını ve işlemlerini benimsemesi gerekir.

Genel olarak sanal makineler, bir makinenin kaynaklarını daha küçük, bireysel bilgisayarlara bölmenize izin verir, ancak sonuç, bir fiziksel bilgisayar filosunu yönetmekten önemli ölçüde farklı değildir. 

Konteynerler farklı bir yaklaşım benimser. Tüm bilgisayarı sanallaştırmak yerine, kapsayıcılar işletim sistemini doğrudan sanallaştırır. Ana bilgisayar işletim sisteminin çekirdeği tarafından yönetilen özel süreçler olarak çalışır, ancak sistem süreçleri ve kaynakları, ortamının kısıtlı ve yoğun bir şekilde manipüle edilmiş bir görünümü ile çalışır. Konteynerler, paylaşılan bir sistemde var olduklarının farkında olmazlar ve sanki bilgisayarın tam kontrolündeymiş gibi çalışırlar.

Kapsayıcıları sanal makinelerde olduğu gibi tam bilgisayarlar gibi ele almak yerine, onları uygulamalara daha benzer şekilde yönetmek daha yaygındır. Örneğin, bir SSH sunucusunu bir kapsayıcıda paketleyebilirsiniz, ancak bu önerilen bir kalıp değildir. Bunun yerine, hata ayıklama genellikle bir günlük kaydı arabirimi aracılığıyla gerçekleştirilir, güncellemeler yeni görüntüler yuvarlanarak uygulanır ve tüm kapsayıcıyı yönetmek için hizmet yönetiminin vurgusu kaldırılır.

Bu özellikler, kapsayıcıların sanal makinelerin güçlü yalıtımı ile geleneksel süreçlerin yerel yönetimi arasında bir yerde bulunan bir alanı işgal ettiği anlamına gelir. Konteynerler, iyi bir sınırlama, esneklik ve hız dengesi sağlayan bölümlendirme ve süreç odaklı sanallaştırma sunar.

Konteyner Taşınabilirliği

Kapsayıcılar, uygulamayı temel alınan altyapıdan ayırır. Bu, geliştiricilerin çabalarını barındırılacak ortam yerine kod yazmaya odaklayabildikleri için hayatı kolaylaştırır.

Örneğin, her sunucu işletim sisteminin aynı Linux çekirdeğini (veya kapsayıcı ortamıyla uyumlu olanı) kullanması koşuluyla, kapsayıcıları farklı yapılandırmalara sahip farklı sunucularda çoğaltabilirler. Bu, bir kodlayıcı ekibinin, her birinin kullandığı ana bilgisayar ortamından bağımsız olarak bir proje üzerinde işbirliği içinde çalışmasına olanak tanır.

Ayrıca, kompakt tasarımları nedeniyle, konteynerlerin Sürekli Entegrasyon – Continuous Integration (CI) ve Sürekli Teslimat – Continuous Delivery (CD) iş akışlarına dahil edilmesi de kolaydır.

Container Kullanım Örnekleri

Örneğin, hata toleransını iyileştirmek için mikro hizmetleri bir sanal makine kümesinde çoğaltabilirsiniz. Bu şekilde, bir VM başarısız olursa, uygulama kümedeki diğer mikro hizmetlere geri dönerek çalışmaya devam eder.

Benzer şekilde, kümenizdeki diğerlerini etkilemeden kapsayıcılarınızın kodunu ve işletim ortamını yamalayabileceğiniz veya güncelleyebileceğiniz için bakım kesinti süresinin ortadan kaldırılmasına da yardımcı olabilir.

Temel Container Kavramları

Docker gibi bir konteyner platformunun pratikte nasıl çalıştığını anlamak için bazı kavramları anlamanız gerekir. Bu kavramlardan en önemlileri aşağıdaki şekildedir:

1. Container Engine

Kapsayıcılarınızı oluşturmak, çalıştırmak ve yönetmek için ana makinenize yüklediğiniz uygulamadır. Kurulumunuzun özüdür ve konteyner sisteminizin diğer tüm bileşenlerini bir araya getirir.

2. Container Image

Gerçek çalışan kapsayıcılar oluşturmak için salt okunur bir şablondur. Tam olarak çalışır durumda bir kapsayıcı ortamını yapılandırmak için gereken tüm temel öğeleri bir araya toplayan bir dosya koleksiyonundan oluşur.

Görüntüyü oluşturan dosyaların her biri katman olarak bilinir. Bu katmanlar, aşamalı olarak birbiri üzerine inşa edilmiş bir dizi ara görüntü oluşturur.

Kapsayıcı görüntüleri salt okunur olduğundan, geleneksel sunucu modelinde çok yaygın olan yapılandırma kayması gibi sorunlardan kaçınarak modern değişmez altyapının tüm güvenilirliğini ve tutarlılığını sunar. Container ortamlarınızda değişiklik yapmanız gerekiyorsa, önceki resminizi güncellenmiş bir resimle değiştirin ve yeni kapsayıcılarınızı bundan başlatın.

3. Parent Image

Kapsayıcı görüntünüzün ilk katmanı ve başlangıç ​​noktasıdır. Konteyner ortamlarınız için temel yapı taşlarını ve diğer tüm katmanların üzerine inşa edildiği temelleri sağlar.

Parent image, genellikle sadeleştirilmiş bir Linux dağıtımıdır. Ancak, bir uygulama framework’ü veya kullanıma hazır içerik yönetim sistemi (CMS) gibi tam bir uygulama yığını da olabilir.

Docker Hub veya Google Container Registry gibi bir kapsayıcı kayıt hizmetinden önceden yapılandırılmış parent image’ları içe aktarabilirsiniz. Alternatif olarak, kendi mevcut resimlerinizden birini de kullanabilirsiniz.

4. Base Image

Temel olarak kapsayıcı görüntülerinizi sıfırdan oluşturmanıza olanak tanıyan boş bir ilk katmandır. Temel görüntüler genellikle, görüntülerinin her parçası üzerinde tam kontrol sahibi olmak isteyen daha ileri düzey kullanıcılar için tasarlanmıştır.

5. Konteyner

Bir kapsayıcı görüntüsünün canlı bir örneğidir. Çalışan bir kapsayıcı temel olarak aşağıdakilerden oluşur:

  • Başlatıldığı görüntü.
  • Kapsayıcı katmanı olarak bilinen ve çalışma süresi boyunca kapsayıcıda yapılan değişiklikleri depolamak için kullanılan, yazılabilir bir üst katman.

Bu katmanlı yapı, benzer kapların her biri kendi bireysel durumunu korurken aynı temel görüntüye erişimi paylaşmasına izin verdiği için kapsayıcı verimliliğinin anahtarıdır.

Konteynerlerin Avantajları Nelerdir?

Konteynerlerin en önemli avantajlarından bazıları aşağıdaki şekildedir:

1. Hafif Sanallaştırma

Sanal makinelerle donanım sanallaştırmasıyla karşılaştırıldığında, kapsayıcılar son derece hafiftir. Kapsayıcılar, tüm donanım kaynaklarını sanallaştırmak ve bu ortamda tamamen bağımsız bir işletim sistemi çalıştırmak yerine, ana bilgisayar sisteminin çekirdeğini kullanır ve bu işletim sistemi içinde bölümlere ayrılmış işlemler olarak çalışır.

Ana bilgisayar açısından bakıldığında, kapsayıcılar diğer işlemler gibi çalışır, yani hızlı bir şekilde başlatılır, durdurulur ve sınırlı miktarda kaynak kullanır. Kapsayıcı, yalnızca ana bilgisayarın işlem alanı ve kaynaklarının bir alt kümesini görüntüleyebilir ve bunlara erişebilir, ancak çoğu durumda tamamen bağımsız bir işletim sistemiymiş gibi davranır.

Kapsayıcı resimlerin kendileri de çok küçük olabilir. Minimum görüntü boyutları, önemli gecikmelere neden olmadan çalışma zamanında en son görüntüyü indirmeye dayanan iş akışlarına olanak tanır. Bu, birçok hataya dayanıklı, kendi kendini iyileştiren dağıtık sistem için bir gerekliliktir.

2. Çevresel İzolasyon

Cgroups and namespaces gibi Linux çekirdek özelliklerini kullanarak, kapsayıcılar ana bilgisayar ortamından ve birbirlerinden yalıtılır. Bu, kapsayıcı ortamlarının birbiriyle karışmasını önlemeye yardımcı olmak için bir düzeyde işlevsel sınırlama sağlar.

Tam güvenlik korumalı alanı olarak kabul edilecek kadar sağlam olmasa da, bu yalıtımın avantajları vardır. Bağımlılık ve kütüphane çakışmalarından kaçınmak daha kolaydır, çünkü ana bilgisayar ve her kapsayıcı yazılımı ayrı dosya sistemlerinde tutar. Ağ ortamları ayrılabildiğinden, kapsayıcı içindeki uygulamalar, ana bilgisayar sistemindeki veya diğer kapsayıcılardaki yazılımlarla çakışma endişesi olmadan yerel bağlantı noktalarına bağlanabilir. Yönetici daha sonra kapsayıcı ağının gereksinimlerine göre ana bilgisayar ağlarıyla nasıl eşleneceğini seçebilir.

3. Standart Paketleme Formatı ve Çalışma Zamanı Hedefi

Kapsayıcıların en çekici faydalarından biri, yazılımları paketleme ve dağıtma sürecini birleştirme ve basitleştirme yetenekleridir. Kapsayıcı görüntüleri, uygulamaları ve tüm çalışma zamanı gereksinimlerini farklı altyapılara dağıtılabilen tek bir birimde toplamanıza olanak tanır.

Geliştiriciler, kapsayıcıların içinde, ana sistem kütüphanelerine müdahale etme korkusu olmadan uygulamalarının gerektirdiği kütüphaneleri yükleyebilir ve kullanabilir. Bağımlılıklar, görüntü oluşturulduğunda sürüm kilitlenir. Kapsayıcı çalışma zamanı standart, kararlı bir dağıtım platformu olarak hareket ettiğinden, geliştiricilerin kapsayıcıların çalışacağı belirli makineler hakkında fazla bir şey bilmesine gerek yoktur. Kapsayıcı çalışma zamanı çalışır durumda olduğu ve yeterli sistem kaynakları bulunduğu sürece, kapsayıcı, geliştirme ortamındaki ile aynı şekilde çalışmalıdır.

Benzer şekilde, operasyonel bir bakış açısından, konteynerleştirme, dağıtım ortamının gereksinimlerini standartlaştırmaya yardımcı olur. Yöneticiler, uygulama diline, çalışma zamanına ve bağımlılıklara dayalı benzersiz ortamlar sağlamak ve sürdürmek yerine, kapsayıcı platformlar olarak işlev gören genel ana bilgisayarları korumaya ve bu makinelerin erişebileceği kaynak havuzlarını ayırmaya odaklanabilir. Tüm belirli uygulama özelliklerini kapsayıcı içinde bir araya getirmek, uygulamanın endişeleri ile platformun endişeleri arasında doğal bir sınır oluşturur.

4. Ölçeklenebilirlik

Kapsayıcı paradigması, uygulamalarınızı nispeten basit mekanizmalar kullanarak ölçeklendirmenize de olanak tanır. Hafif görüntü boyutları, hızlı başlatma süreleri, test etme ve dağıtma yeteneği ve standartlaştırılmış çalışma zamanı ortamı, tümü yüksek düzeyde ölçeklenebilir sistemler oluşturmak için kullanılabilecek özelliklerdir.

Bir sistemin ölçeklenebilirliği, büyük ölçüde uygulama mimarisine ve konteyner görüntülerinin kendilerinin nasıl oluşturulduğuna bağlıdır. Kapsayıcı paradigmasıyla iyi çalışan tasarımlar, iyi bir hız, kullanılabilirlik ve yönetilebilirlik dengesi elde etmek için kapsayıcı biçiminin güçlü yanlarını tanır. Hizmet odaklı mimariler ve özellikle mikro hizmetler, kapsayıcılı ortamlarda inanılmaz derecede popülerdir, çünkü uygulamaları odaklanmış bir amaç ile ayrı bileşenlere ayrıştırmak, geliştirmeyi, ölçeklendirmeyi ve güncellemeyi daha kolay hale getirir.

Docker Nedir?

Linux kapsayıcıları, bir dizi farklı şekilde uygulanabilen ve yönetilebilen biraz genel bir teknoloji olsa da, Docker, kapsayıcıları oluşturma ve çalıştırmanın açık ara en yaygın yoludur. Docker, kullanıcıların kapsayıcı görüntüleri oluşturmasına, dış kayıtlardan görüntüleri göndermesine veya çekmesine ve birçok farklı ortamda kapsayıcıları çalıştırmasına ve yönetmesine olanak tanıyan bir araçlar kümesidir. Linux’ta kapsayıcıların popülaritesindeki artış, Docker’ın 2013’te piyasaya sürülmesinin ardından gerçekleşmiştir.

Docker komut satırı aracı birçok rol oynar. Kapsayıcı iş yükleri için bir süreç yöneticisi olarak hareket ederek kapsayıcıları çalıştırır ve yönetir. Dockerfile komutlarını okuyarak ve yürüterek veya halihazırda çalışmakta olan kapsayıcıların anlık görüntülerini alarak yeni kapsayıcı görüntüleri oluşturabilir. Komut ayrıca, yeni kapsayıcı görüntülerini aşağı çekmek, yerel görüntüleri kaydetmek veya yayınlamak üzere yukarı itmek için bir kapsayıcı görüntü kaydı olan Docker Hub ile etkileşime girebilir.

Docker, Linux’taki birçok kapsayıcı uygulamasından yalnızca birini sağlarken, kapsayıcılar dünyasına en yaygın giriş noktası ve en yaygın olarak dağıtılan çözüm olma ayrıcalığına sahiptir. Birlikte çalışabilirliği sağlamak için kapsayıcılar için açık standartlar geliştirilmiş olsa da, kapsayıcıyla ilgili çoğu platform ve araç, yazılımı test ederken ve yayınlarken Docker’ı ana hedefleri olarak görür. Docker, belirli bir ortam için her zaman en performanslı çözüm olmayabilir, ancak en iyi test edilmiş seçeneklerden biri olması muhtemeldir.

Linux’ta container’lar için alternatifler olsa da, her yerde bulunması ve terminoloji, standartlar ve ekosistemin araçları üzerindeki etkisi nedeniyle genellikle önce Docker’ı öğrenmek mantıklıdır.

Özetle diyebiliriz ki, container’lar sihirli bir değnek değildir, ancak diğer sanallaştırma teknolojilerini kullanmaya göre bazı çekici avantajlar sunar. Kapsayıcılar, hafif, işlevsel yalıtım sağlayarak ve karmaşıklığın yönetilmesine yardımcı olacak zengin bir araç ekosistemi geliştirerek, hem geliştirme sırasında hem de operasyonel yaşam döngüleri boyunca büyük esneklik ve kontrol sunar.


0 Yorum

E-posta hesabınız yayımlanmayacak.