Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Docker Nedir?

Merhaba,

Bu içeriğimizde .NET Core & Docker Yazı Dizisinin ilk girizgahı olan Docker teknolojisinin ne olduğuna dair uzun ve geniş bir makale kaleme alıyor olacağız. Haydi gelin, uzun soluklu bir makale dizisinin teorik ve kavramsal temellerini burada sarsılmaz bir şekilde inşa edelim…

Docker Nedir?

Yazılım geliştiriciler ve sistem yöneticileri için geliştirilmiş açık kaynak olan bir yeni nesil sanallaştırma platformudur.

Biliyorum… Her ne kadar okumayı bilen ve bu yüzden okuduğunu anlayan yüksek ferasetli bir birey olsanızda yukarıdaki açıklamanın sizin için pekte bir anlam ifade etmediğinin farkındayım. O yüzden Docker’ın ne olduğuna dair yapılan tanımı anlamlı hale getirebilmemiz için öncelikle bu tanımın vurgusundaki temel kavramı inceleyelim. Yani ‘sanallaştırma‘ kavramını…

Sanallaştırma Nedir?

Temelde, bir bilgisayarda kurulu işletim sistemi üzerinde bir veya birden fazla farklı işletim sistemini birbirlerinden izole edilmiş halde ayağa kaldırabilen ve üzerinde belirlenmiş amaç ya da amaçlara uygun işlem yapılmasını sağlayan teknolojilerin genel adıdır, sanallaştırma. Yani bir nevi sanal ortamda birden fazla makine oluşturmaktır diyebiliriz.

Sanallaştırmayı aşağıdaki senaryoya uygun durumlarda kullanabiliriz.
Bir işletme; web sitelerini barındırmak, e-posta yönetimini sağlamak ve erp uygulamasını çalıştırmak için çözüm aramaktadır. Eğer ki her bir işleme özel üç fiziksel sunucu kiralandığını yahut alındığını düşünürsek muhtemelen her bir sunucudaki iş yükü yapacağı işe göre değişkenlik gösterecek olsada bilgi işlem kapasitesine nazaran kesinlikle %100’lük bir dağılım göstermeyeceğinden dolayı işletme giderlerinde yüksek maliyete sebebiyet verecektir. Düşünsenize, 100 birimlik bilgi işlem kapasitesi olan bir sunucuyu maksimum 30 birimlik bir işe özel ayarlamak verim ve maliyet açısından ne kadar mantıklı ve tercih edilmeye değer olabilir ki?

İşte böyle bir durumda sanallaştırma tercih edilerek birden fazla makine üzerinde çalışmak yerine tek bir makine üzerinden gerektiği kadar sanal makine üretilebilir ve her bir sanal makineya ihtiyacı kadar bilgi işlem kapasitesi atanarak %100’e yakın bir verimlilik ve mümkün mertebe düşük maliyetle ihtiyaç giderilebilir.

Sanırım sanallaştırmanın ne olduğunu artık anladığımızı düşünüyorum. Şimdi Docker’ın ne olduğuna dair açıklamalarımıza devam edebiliriz.

Docker, yazılım geliştiriciler ve sistem yöneticileri için yeni nesil sanallaştırma platformudur demiştik. Yani yukarıdaki senaryotik anlatımda olduğu gibi bir makine üzerinde sanal makineler kurmamızı ve bu işlemi birazdan mukayese edeceğimiz üzere eski yöntemlere nazaran daha performanslı bir yaklaşımla gerçekleştirmemizi sağlayan teknolojidir. Ayrıca büyük bir Open Source Community’e sahiptir ve GO diliyle yazılmıştır.

Peki eski teknolojilerden farkı nedir?
Bu soruyu cevaplayabilmek için yeni nesilden önceki teknolojilerin çalışma mekanizmasına göz atmamız gerekmektedir. Bunun için aşağıdaki şemada görsel anlatılan yapı bizlere rehberlik edebilir.
Docker Nedir?
Şemayı incelersek eğer, sunucu(yahut makine) üzerinde kurulu olan bir işletim sistemi(infrastructure) üzerinde sanallaştırma mekanizmasını sağlayan Hypervisor yapısı kuruludur. Bu yapı sayesinde birbirinden farklı konfigürasyonlara sahip sanal makineler ayağa kaldırılır. Burada dikkat ederseniz her bir sanal makine içerisinde misafir bir işletim sistemi kurulmakta ve bununla beraber barındırılan uygulamaya dair publish dosyaları ve kütüphaneler tutulmaktadır.

Yeni nesil olan Docker teknolojisinin sanallaştırma mekanizmasını incelersek eğer;
Docker Nedir?
Görüldüğü üzere yine bir sunucu üzerinde kurulu işletim sistemi üzerinde(infrastructure & host operating system) sanal makineler ayağa kaldırılmakta lakin bu sefer dikkat ederseniz Hypervisor yerine Docker teknolojisi kullanılmaktadır. Docker üzerinden ayağa kaldırılan tüm sanal makineleri(ileride bunlara container diyeceğiz) incelersek eğer misafir bir işletim sistemi olmaksızın direkt olarak barındırılacak uygulamaya dair kütüphaneler ve gerekli dosyaları tutmaktadır.

Buradan anlayacağımız Docker öncesi sanallaştırma ortamlarında; ayağa kaldırılan sanal makinalarda öncelikle bir misafir işletim sistemi ayağa kaldırmak ve ardından sırasıyla konfigürasyon ayarlamak ve uygulama kütüphanelerini yüklemek gerekiyordu ve ancak bu işlemlerden sonra uygulamayı ayağa kaldırabiliyorduk.

Lakin günümüzde Docker sayesinde ayağa kaldırılan uygulamalarda ekstradan misafir bir işletim sistemi yüklememize gerek kalmamakta ve sadece uygulamaya dair kütüphane, dosya vs. ile birlikte publish dosyalarının yüklenmesi yeterli olmaktadır.

Yeni nesilden önceki teknolojilerin genel adı Virtual Machine‘dir.

Virtual Machine, farklı seviyelerde sanallaştırma sağlayan Hypervisor kullanarak donanım paylaştırma üzerine odaklı bir çalışma yapmaktadır. Her bir virtual machine içerisinde kendi işletim sistemi vardır ve bellek yönetimi birbirlerinden izole edilmiştir. Docker ise başlı başına bir platformdur. Bilgisayarda kurulan Docker Engine üzerinden konteynerlar çalıştırılarak paylaşım gerçekleştirilir.

Container Nedir?
İçerisinde uygulamayı çalıştıracak olan mini işletim sistemi olarak düşünebiliriz. Sonraki makalelerimizde daha detaylı inceleyecek ve irdeleyeceğiz.

Docker ile Virtual Machine yapısı arasındaki farkı daha net görebilmek için aşağıda kıyaslayalım;

Virtual Machine Docker
OS Tam işletim sistemi Küçültülmüş işletim sistemi
İzalasyon İşletim sistemi seviyesinde. Yüksek Container seviyesinde. Düşük
Çalışır hale gelmesi Dakikalar Saniyeler
Versiyonlama Yok Var
Kolay paylaşılabilirlik Düşük Yüksek

Docker; yeni yeteneklerle getirdiği pratik sanallaştırmanın yanında, uygulamayı güvenli bir şekilde izole ederek hızlı ve esnek deployment kolaylığı sağlayabilen ve bir yandan da işletim maliyetini oldukça azaltabilen bir teknoloji olmasıyla birlikte microservices gibi birçok mimarisel senaryoya eşlik edebilen ve detaylıca monitör edilebilen, taşınabilen ve ölçeklendirilebilen bir sanallaştırma teknolojisidir. Ayrıca yüzlerce dağıtık docker container üzerinde çeşitli frameworkler çalıştırmamıza olanak sağlar.

Docker, development ortamındaki konfigürasyon ile production ortamındaki konfigürasyonu birebir aynı sağlayacağı için “local’de çalışıyordu, test’te çalışmıyor”, “bilgisayarda çalışan uygulama, sunucuda neden çalışmaz lan!” vs. şeklindeki sorunlara kökten çözüm üreten bir teknolojidir.

Docker, bir sunucuda birkaç dakika içerisinde uygulamamızı kurmamızı sağlayan efsanedir.

Nihai söze gelirsek, sanallaştırma operasyonlarında kullanım kolaylığı, hızlı ölçeklendirilebilmesi, kolay paylaşılabilirliği ve bağımsız işlevler olan micro hizmet mimarisini desteklemesi sebeplerinden ötürü tercih ettiğimiz/edeceğimiz bir platform olan Docker üzerine giriş seviyesinde teorik istişare etmiş olduk. Okuduğunuz için teşekkür ederim.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

3 Cevaplar

  1. samet dedi ki:

    teşekkürler

  2. Bilal dedi ki:

    Hocam teşekkürler sesinizle okudum : D

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir