Konteyner Teknolojileri ve Docker

Özen Karaçakır Ereyli
CITS Tech
Published in
4 min readJan 26, 2024
Resim 1: Docker Mimarisi Logosu

Modern yazılım geliştirme çağında dağıtımı şekillendiren, çalışma zamanı teknolojilerinden, güvenlikte ve orkestrasyon araçlarında gelişmelere açık olan konteyner teknolojilerinin geçmişten günümüze yolculuğunu ele alıp, detaylarıyla incelemek istedik.

Konteyner teknolojileri, yazılım geliştirme yaşam döngüsünün farklı aşamalarında tutarlı bir ortam sağlayarak uygulamaların geliştirme, test ve üretim aşamalarında aynı şekilde çalışmasına olanak verir. Bu konteynerler uygulamaları ve bağımlılıklarını izole ederek çakışmaları azaltır ve her uygulamanın aynı sistem üzerinde diğerlerinden bağımsız olarak çalışmasını sağlar. Ayrıca ana işletim sistemi çekirdeğini paylaşarak onları sanal makinelere kıyasla kaynak açısından daha verimli hale getirir. Böylece daha hızlı başlatma sürelerine sahiptirler. Konteynerler kolay ölçeklendirmeyi destekleyerek uygulamaların gevşek bağlı, bağımsız olarak konuşlandırılabilen bileşenlerden oluştuğu mikroservis gibi modern mimariler için çok uygundur.

Resim 2: Örnek Docker Mimarisi

Konteyner teknolojileri modern yazılım geliştirmede önemli rol oynar. Yıldan yıla yayılan zengin bir geçmişi vardır. Konteyner teknolojilerinin geçmişine kısa bir genel bakış atarak günümüzde yaygın bir şekilde kullanılan Docker’a geçiş yapalım.

Chroot (1979):

Muhafaza kavramı, Unix Sürüm 7'de tanıtılan chroot sistem çağrısına kadar izlenebilir. Chroot, süreçlerin değiştirilmiş bir kök dizinde çalışmasına izin vererek bir tür yalıtılmış ortam oluşturmuş. Ancak güvenlik amacıyla tasarlanmamıştı ve sınırlamaları onu tam uygulama izolasyonu için uygunsuz kılmış.

BSD Jails (2000):

FreeBSD 4.0'da tanıtılan BSD Jails, daha sağlam bir muhafaza biçimi sağlamış. Yöneticilerin bir FreeBSD sistemini her biri kendi dosya sistemine, süreçlerine ve ağ yığınına sahip birden fazla bağımsız ortama bölmesine olanak tanınmış. Chroot’tan daha güçlü olmasına rağmen BSD Jails hâlâ öncelikli olarak sistem düzeyinde izolasyon için kullanılıyor.

Solaris Zones (2004):

Sun Microsystems, Solaris işletim sisteminde hafif bir sanallaştırma biçimi olarak Solaris Containers’ı (daha sonra Solaris Zones olarak yeniden markalandı) tanıtmış. Bölgeler, kendi süreçleri, dosya sistemleri ve ağ yapılandırmalarıyla yalıtılmış kullanıcı alanı ortamlarının oluşturulmasına olanak sağlamıştı.

Linux Konteynerleri (LXC) (2008):

LXC, konteyner teknolojisini Linux işletim sistemine getirdi. Süreç ve kaynak yalıtımı sağlamak için gruplar ve alan adları gibi çekirdek özellikler kullanıldı. LXC konteynerleri, verimlilik ve performans açısından geleneksel sanallaştırmaya göre bir gelişmeydi ancak daha sonraki konteyner teknolojilerinin ele alacağı bazı kullanıcı dostu ve taşınabilirlikten yoksun olduğu anlaşıldı.

Docker (2013):

Docker, kullanıcı dostu, standartlaştırılmış bir platform sunarak konteyner teknolojisinde devrim yarattı. Docker konteynerleri, uygulamaları ve bunların bağımlılıklarını kapsülleyerek, uygulamaların farklı ortamlarda tutarlı bir şekilde dağıtılmasını ve çalıştırılmasını kolaylaştırır. Docker’ın başarısı, yazılım geliştirme topluluğunda konteynerleştirmenin yaygınlaştırılmasında önemli bir rol oynadı.

Açık Konteyner Girişimi (OCI) (2015):

Kapsayıcı formatlarını ve çalışma zamanını standartlaştırmak için Docker, Google ve diğer sektör liderleri Açık Kapsayıcı Girişimi’ni kurmuştur. OCI, farklı konteynerleştirme platformları arasında uyumluluğu ve birlikte çalışabilirliği teşvik ederek konteyner formatları ve çalışma zamanı için açık endüstri standartları oluşturmayı amaçlamıştır.

Kubernetes (2014):

Başlangıçta Google tarafından geliştirilen Kubernetes, açık kaynaklı bir konteyner düzenleme platformu olarak ortaya çıkmıştır. Konteynerli uygulamaların dağıtımını, ölçeklendirilmesini ve yönetimini otomatikleştirerek, konteyner orkestrasyonu ve uygun ölçekte yönetim için güçlü bir araç sağlamıştır. Kubernetes, konteynerli mikroservis mimarileri için önemli bir kolaylaştırıcı haline gelmiştir.

Containerd (2017):

Docker, konteyner çalışma zamanını (containerd) CNCF’ye (Bulut Yerel Bilgi İşlem Vakfı) bağışlamıştır. Containerd, Kubernetes gibi konteyner düzenleme platformlarının temel bileşeni haline gelerek konteynerli uygulamalar için standart bir çalışma zamanı sağlamıştır.

Docker Nedir, Ne işe yarar?

Konteyner teknolojilerinden Docker, yazılım geliştirme ve dağıtımında tutarlılık, taşınabilirlik, yalıtım, verimlilik ve ölçeklenebilirlik ile ilgili zorlukları ele almıştır. Bu zorlukları kolaylaştırma adına konteynerlerdeki uygulamaları geliştirmek, göndermek ve çalıştırmak için kullanılan bir platformdur. Kapsayıcılar; kod, çalışma zamanı, kitaplıklar ve sistem araçları da dahil olmak üzere bir yazılımı çalıştırmak için gereken her şeyi içeren hafif, bağımsız ve yürütülebilir yazılım paketleridir. Docker, farklı geliştirme, test ve dağıtım aşamalarında tutarlı ve taşınabilir bir ortam sağlamıştır.

Docker, uygulamaları ve bağımlılıklarını konteynerlere kapsüllemek için konteynerleştirme teknolojisini kullanılmıştır. Konteynerler, uygulamayı temeldeki sistemden yalıtarak ortamdan bağımsız olarak tutarlı bir şekilde çalışmasını sağlamıştır. Bu, uygulamaların çeşitli bilgi işlem ortamlarında dağıtılmasını ve yönetilmesini kolaylaştırır.

Docker’ın Avantajları

Portability: Konteynerler geliştirme, test etme ve üretim gibi farklı ortamlarda tutarlı bir şekilde çalışabilir. Bu taşınabilirlik “it works on my machine :) “ sorununu azaltır.

Isolation: Konteynerler, uygulamalar için bir düzeyde izolasyon sağlayarak birbirlerine veya temel sisteme müdahale etmemelerini sağlar.

Efficiency: Konteynerler, ana işletim sistemi çekirdeğini paylaşarak onları sanal makinelere kıyasla daha hafif hale getirir. Bu, daha hızlı başlatma süreleri ve daha verimli kaynak kullanımıyla sonuçlanır.

Scalability: Docker, birden fazla konteyner örneğini çalıştırarak uygulamaların kolayca ölçeklendirilmesine olanak tanır. Bu özellikle mikroservis mimarilerinde faydalıdır.

Docker Nasıl Çalışır?

Docker Engine: Bu Docker’ın çekirdeğidir. Bir ana sistemdeki kapları yöneten hafif bir çalışma zamanı ve araçtır. Konteynerleri yöneten bir sunucudan (arka plan programı) ve kullanıcıların Docker ile etkileşime geçmesine olanak tanıyan bir CLI’den (Komut Satırı Arayüzü) oluşur.

Images: Kapsayıcılar, uygulamayı çalıştırmak için gereken uygulama kodunu, çalışma zamanını, kitaplıkları ve sistem araçlarını içeren hafif, bağımsız ve yürütülebilir paketler olan Docker görüntülerinden oluşturulur.

Dockerfile: Docker images, görüntüyü oluşturmak için gereken adımları belirten komut dosyaları olan Dockerfiles kullanılarak oluşturulur. Dock,er dosyaları temel görüntüyü, uygulama kodunu, bağımlılıkları ve yapılandırmayı tanımlar.

Registry: Docker görüntüleri, Docker Hub veya özel kayıt defterleri gibi kayıt defterlerinde saklanabilir. Kullanıcılar, görüntüleri kayıtlardan yerel sistemlerine çekebilir veya özel görüntülerini başkalarıyla paylaşmak üzere aktarabilir.

Modern yazılım dünyasında yazılım geliştiricilerinin işlerini kolaylaştıran bir teknolojiyi özetlemeye çalıştık. Konteyner teknolojileri, yazılım geliştirme süreçlerine önemli katkılarda bulunarak uygulamaların tutarlılık, taşınabilirlik, yalıtım, verimlilik ve ölçeklenebilirlik gibi temel gereksinimlerini karşılamada büyük bir rol oynar. Docker’ın çıkışıyla birlikte, konteynerler yazılım geliştirme topluluğunda hızla benimsendi ve bu teknolojilerin yaygınlaşmasına öncülük etti. Taşınabilir görüntüler, Dockerfile ve Docker Hub gibi araçlar, yazılım geliştiricilere uygulamalarını hızlı bir şekilde paketleme, dağıtma ve yönetme imkanı tanır. Konteyner teknolojileri, günümüzdeki mikroservis mimarileri ve sürekli entegrasyon/teslim (CI/CD) süreçleri gibi modern yazılım geliştirme uygulamalarının vazgeçilmez bir parçası haline gelmiştir. Bu teknolojiler, geliştiricilere esneklik, hız ve güvenilirlik sunarak yazılım geliştirme süreçlerini daha etkili hale getirir.

Docker ile ilgili karşılaştırılan en geniş yelpazeli video serisi kaynağı: https://www.youtube.com/watch?v=4XVfmGE1F_w&list=PL_f2F0Oyaj4_xkCDqnRWp4p5ypjDeC0kO

--

--