DevOps'ta Konteynerleştirme: Bilmeniz Gereken Her Şey
Yayınlanan: 2022-09-16Kapsayıcılaştırma, işletmelerin işletim sistemini sanallaştırmasına ve kapsayıcı adı verilen yalıtılmış bölgelerde uygulama yüklemesine olanak tanır.
Konteynerleştirme, uygulama oluşturmanın modern bir yoludur.
Eski sistemin ve mimarisinin nasıl bir barikat oluşturduğuna, insanların “Kodum çalışmıyor; Sebebini bilmiyorum! Kod çalışıyor, ama neden olduğundan emin değilim!”
Uygulama büyüdükçe, bir uygulamanın tanımı sadece bir kod parçasından bir dizi kod, ikili dosyalar, konfigürasyonlar ve çalışan bir ortam olarak değişti.
Daha önceki günlerimizde sıkça karşılaştığımız bir durumu hayal edin. Dizüstü bilgisayarda geliştirici bazı Java 8 kodları geliştirdi. Aynı kod bir web sunucusunda/VM'de çalışmadı. Birçok sorun giderme işleminden sonra sunucunun Java sürümünün JDK11 olduğu bulundu.
Kafası karışmış?
Kod aynı kaldı, ancak kodu destekleyen yazılım farklı bir konfigürasyona sahipti. Küçük bir şey yüzünden geliştiricilerin başı büyük belaya girdi. Aynısı, bir kod parçasını Linux'tan Windows işletim sistemine aktarırken de söylenebilir.
Eski sistemin yönetim yükü, ölçeklenebilirliği ve maliyet etkinsizliği, iş yükünün çeşitli bulut sağlayıcıları tarafından sağlanan VM'lerde barındırıldığı bulut bilişimin benimsenmesine yol açtı. Bu sanallaştırmadan başka bir şey değil.
Sanallaştırma, basit bir ifadeyle, bulut sağlayıcısı/veri merkezi tarafından sağlanan tek bir sunucu/VM üzerindeki birkaç işletim sistemidir (OS). Sanallaştırma, uygulamaları fiziksel donanıma ihtiyaç duymadan veya içinde ne olduğunu bilmek zorunda kalmadan yalıtır.
Ancak, bu mimari de zamanın testine dayanamadı ve konteynerleştirme geldi.
Konteynerleştirme, işletim sistemlerini işletim sistemlerine sahip olarak daha verimli kullanılabilecek parçalara ayırmaya odaklanır. VM'de çalışan işletim sistemi veya donanım hakkında endişelenmeden uygulama kodunu çalıştıran küçük bir mini ortamdır.
Şimdi, konteynerleştirmeyi ayrıntılı olarak tartışalım.
Konteynerleştirme nedir?

Konteynerleştirme, içinde çalışacağı işletim sistemi olan ortam da dahil olmak üzere uygulamanın tüm bileşenlerinin, konteyner adı verilen VM'de yalıtılmış alana paketlendiği bir tür işletim sistemi sanallaştırmasıdır. Bu kapsayıcıların temel işletim sistemi aynıdır, ancak yapılandırmalarının bir parçası olarak kendilerine ait bir işletim sistemi vardır.
Konteynerler kapsamlı, ağır sistemler değildir. Bunun yerine küçük, taşınabilir ve çalıştırılması veya kurulması kolaydır. Bir geliştirici bir uygulamayı kapsayıcı hale getirdiğinde, kapsayıcı ana bilgisayar işletim sisteminden ayrılır ve hafif bir sanal makine gibi sistem kaynaklarına sınırlı erişime sahiptir. Kapsayıcılı uygulama, yeniden yazılmasına gerek kalmadan yalın donanım, bulut veya sanal makineler gibi farklı altyapılarda çalışabilir.
Konteynerleştirme Teknolojisi Nasıl Çalışır?
Konteynerleştirme, bir uygulamanın ihtiyaç duyduğu tüm parçaları tek bir sanal birime koyarak çalışır.
Kapsayıcılaştırma, geliştiricilerin uygulama kodunu yapılandırma dosyaları, bağımlılıkları ve kitaplıklarıyla bir araya getirmesine olanak tanır. Bu tek yazılım paketini (kap) ana bilgisayar işletim sisteminden ayırın. Paketleme, konteynerin tek başına durmasını ve taşınabilir olmasını sağlar, böylece herhangi bir platformda veya bulutta sorunsuz çalışabilir. Bunu bir lego tahtasından alınmış küçük bir lego parçası olarak düşünün.
Ancak kapsayıcılar, sanallaştırılmış donanım veya çekirdek kaynaklarını doğrudan kullanmaz. Konteynerler, VM'lerde çalışan işletim sistemini umursamaz veya endişe duymaz.
Bunun yerine, kapsayıcılar, kapsayıcıları işlemek ve temel kaynakları gizlemek için özel olarak tasarlanmış bir platformun "üstünde" çalışır. Konteynerler, yalnızca bir uygulamanın en önemli bileşenlerini ve bağımlılıklarını oluşturdukları için hız ve boyut açısından sanal makineler ve yalın donanım sunucular gibi alternatiflerden üstündür. Ayrıca, ilgili sorunlarla uğraşmadan aynı uygulamanın çeşitli bağlamlarda yürütülmesini sağlarlar.
Konteynerleştirme ve Sanallaştırma
Uygulama yaşam döngüsü konusunda bilgili olmayan kişiler, Docker gibi yazılımların yaptığı kapsayıcılaştırma ile geleneksel sunucu sanallaştırması (HyperV ve VMware ESXi gibi hipervizörlerin etkinleştirdiği) arasındaki farkı her zaman bilmezler. Ancak, işte farkı yaratan şey:

Sunucu sanallaştırmada donanım gizlenir ve üzerinde bir işletim sistemi çalıştırılır. Konteynerleştirme, bir uygulamayı bir işletim sisteminin üzerinde çalıştırmanın bir yoludur. Sanallaştırma, temel alınan ana bilgisayar işletim sistemine bağlıdır, ancak yeterli kaynağa sahip olmadığı sürece donanım hakkında endişelenmez. İşte farklılıkların tam listesi.
Mülk | Konteynerleştirme | sanallaştırma |
Çevre | Kapsayıcılar, birden çok ortamda çalışan bir işletim sistemi ile paketlenir. | Sanallaştırma, ana bilgisayarın üzerine kuruludur, işletim sistemi ile ayrılmış bir makine olarak görünür. |
Başlatmak | Konteynerler başlangıçta çok daha az ila çok az zaman alır. | Sanal Makinelerin başlatılması birkaç dakika sürer. |
Kaynak | Bunlar, hiç de kaynak ağırlıklı olmayan küçük bir ortamdır. | VM'ler, ölçeklendirme özelliği olmadan kaynak ağırlıklıdır. |
uygulama | Temel donanım, hiper yöneticiler tarafından sanallaştırılır (aynı donanımın kullanımı). | Kapsayıcılar, işletim sistemini sanal hale getirir (aynı işletim sisteminin kullanımı). |
Maliyet | Uygulanması daha kolay ve ucuzdur. | Bunlar pahalıdır ve makinenin boyutuna bağlı olarak bulut sağlayıcılarına ağır faturalar ödenmesi gerekir. |
Konteynerleştirme Katmanları

Donanım altyapısı: Her uygulamanın temeli, üretken kullanıma konulabilecek bir dizi somut kaynaktır. Kapsayıcıların düzgün çalışması için bu kaynakların mevcut olması gerekir. Bir dizüstü bilgisayarda veya buluta bağlı birçok veri merkezinden birinde çalışıyor olabilirler.

Ana işletim sistemi: Donanım katmanından sonra bir sonraki katman olan ana bilgisayar işletim sistemi gelir. Donanım katmanında olduğu gibi, bu, herhangi bir kişisel bilgisayara Windows veya *nix yüklemek kadar basit olabilir veya tamamen bir bulut hizmeti sağlayıcısı tarafından gerçekleştirilebilir.
Konteyner Motoru: İşlerin heyecan verici bir dönüş almaya başladığı yer burası: konteyner motoru. Konteyner motorları, ana bilgisayar işletim sisteminin üzerine yüklenen yazılımlardır ve kapsayıcılı uygulamaların gerektirdiği kaynakları sanallaştırmaktan sorumludur.
Bu katman, Docker bir bilgisayarda çalıştırıldığında kavraması en kolay olanıdır. Bu katman, konteynerin çalışır durumda olmasını sağlar ve genel yaşam döngüsünü yönetir.
Kapsayıcılar: Kapsayıcı uygulamalar, bir uygulamanın yürütmesi gereken tüm kitaplıkları, ikili dosyaları ve yapılandırma ayarlarını içeren kod parçalarıdır. Konteynerler, Docker konteynerleri olarak da bilinir. Kapsayıcılaştırılmış bir uygulama, işletim sisteminin çekirdeğinden farklı olan "kullanıcı alanı" içinde kendi süreci olarak çalışır.
Konteynerleştirmenin Faydaları

Taşınabilirlik : İnsanlar, bir ortamda (örn., hazırlama) iyi çalışan bir uygulamadan, diğerinde çalışmadığından şikayet ederler. Bu bir DevOps ikilemi. Genellikle sorun çevresel bir farklılıktır. Belki bir bağımlılık güncellendi. Bağımlılıklar da dahil olmak üzere aynı kapsayıcı görüntüleri, kapsayıcılaştırma ile her yerde yürütülebilir.
Hızlı : Konteynerler, sanal makinelerden veya yalın donanım sunuculardan daha hızlı başlar. Konteynerler saniyeler içinde açılırken sanal makineler kaynaklara ve uygulama boyutuna bağlı olarak dakikalar alır.
Kaynak Verimli : Kapsayıcılar, yalnızca uygulamaya özel dosyalar içerdiklerinden sanal makinelerden daha verimlidir. Sanal makineler gigabayt, konteynerler ise megabayttır. Kapsayıcılar, ekiplerin sunucu kaynaklarını verimli bir şekilde kullanmasını sağlar.
Dağıtım-Geliştirme basitliği : Taşınabilir konteynerler her yerde kullanılabilir. Container mimarisine alınmış uygulamalar hızlı, küçük ve dağıtımı kolaydır.
Konteynerleştirme, ekibinizin aynı görüntüyü yerel olarak ve üretimde oluşturmasına olanak tanır. Kapsayıcı uygulamaları, bir şeyin bir konumda çalışıp başka bir yerde çalışmadığı durumları azaltabilir. CI/CD işlem hatları, konteyner yapımını destekler. Bu avantajlar ekip verimliliğini artırır.
Sorun Giderme : Konteynerleştirme uygulamaları yalıtır ve ayırır. Bir kapsayıcının arızası, diğerlerinin işlevselliğini etkilemez. Geliştirme ekipleri, diğerlerini etkilemeden hatalı bir kapsayıcıyı tanımlayabilir ve onarabilir. Konteyner motoru, konteyner sorunlarını bulmak ve izole etmek için SELinux erişim kontrolünü kullanabilir.
Güvenlik : Kapsayıcı programlar, kötü amaçlı yazılımların diğer uygulamalara veya ana bilgisayar sistemine zarar vermesini önler. Belirtilen güvenlik izinleri, istenmeyen bileşenlerin diğer kapsayıcılara girmesini durdurmak veya iletişimleri sınırlamak için ayarlanır.
Yönetilebilirlik : Bir kapsayıcı düzenleme platformu kullanarak kapsayıcılı iş yüklerini ve hizmetleri otomatikleştirin. Kapsayıcı düzenleme, yeni uygulama sürümleri yayınlama, kapsayıcılı programları ölçeklendirme ve izleme, günlüğe kaydetme ve hata ayıklama dahil olmak üzere yönetim işlerini basitleştirir.
Süreklilik : Bir konteynerin arızası diğerlerini etkilemeyecektir. Geliştiriciler, diğerlerini etkilemeden bir kapsayıcıyı düzeltebilir. Konteynerleştirme, operasyonel sürekliliği garanti eder.
Çözüm
Konteynerleştirme, zamanla daha verimli hale gelecek yeni bir yazılım geliştirme konseptidir. Destekçileri, geliştiricilerin yazılım ve uygulamaları daha hızlı ve güvenli bir şekilde oluşturmasına ve dağıtmasına yardımcı olduğuna inanıyor.
Konteynerleştirme ekosistemleri olgunlaştıkça ve büyüdükçe, sektör katılımcıları fiyatların düşmesini bekliyor. Bununla birlikte, işletme sorunu çözülür, ancak bu kadar çok küçük ortamla birlikte bakım yükü arka planda kalır. Konteynerleştirme için bir sonraki önemli şey orkestrasyondur.
Modern uygulamalar burada bitmeyecek. Kubernetes, konteynerleştirme ve mikro hizmetlerde bir sonraki büyük şeydir. Kubernetes, kapsayıcı kurulumlarını ölçeklendirmeyi ve yönetmeyi kolaylaştırır. K8s, Docker veya LXC'den daha büyük olan kapsayıcı dağıtımlarını yönetir. K8s, kapsayıcıları yönetmek için çok sevilen bir araçtır.
Artık bu konteyner geçmişte kaldı, genel tavsiye K8'lere atlamak.