- Docker teknolojisi
Docker,
dünyada en çok kullanılan yazılım konteynerleştirme platformudur. Konteynerleştirme konteyner
içine koyma anlamına
gelir.
Docker,
Linux Kernel’e 2008
yılında eklenen Linux Containers
(LXC) üzerine kurulu bir teknolojidir. LXC, Linux’da aynı
işletim sistemi içerisinde birbirinden izole olmuş bir biçimde çalışan Container’lar
(Linux tabanlı sistemler) sağlamaktadır.
Container’lar içerisinde
aynı işletim sistemi tarafından çalıştırılan process’lere, LXC
tarafından işletim sisteminde sadece kendileri koşuyormuş gibi düşünmeleri için
bir sanallaştırma ortamı sağlanmıştır.
LXC, Container’lara
işletim sistemi tarafından sunulan dosya sistemi, ortam değişkenleri
(Environment Variable), vb
fonksiyonları her bir Container’a özgü
olarak sağlar. Aynı işletim sistemi içerisinde çalışmalarına rağmen Container’lar
birbirlerinden izole edilmişlerdir ve birbirleri ile istenmediği müddetçe
iletişime geçemezler.
İletişim kısıtlamasının bir amacı
da Container’larının
güvenliğini aynı Host üzerindeki diğer Container’lara
karşı da korumaktır.
LXC, Docker ve
klasik sanallaştırma VMware, Xen, Hyper-V
gibi Hypervisor’ler
(sanallaştırma platformları), yönettikleri fiziksel veya sanal bilgisayarlar
üzerine farklı işletim sistemleri kurulmasına olanak tanımaktadırlar.
Günümüzde
veri merkezleri (data center) çok
büyük oranda sayılan Hypervisor’ler
tarafından sanallaştırılmışlardır, Cloud (Bulut) olarak adlandırılan
kavramın altyapı kısmını oluşturan geniş veri merkezleri tamamıyla Hypervisor’ler
tarafından yönetilmektedir.
Hypervisor
platformları sayesinde fiziksel olarak işletilen güçlü sunucular, ihtiyaç
ölçüsünde farklı işletim sistemleri (kimi zaman hem Windows hem de Linux aynı
fiziksel sunucuda) kurularak kolaylıkla işletilebilmektedir.
Sanallaştırılan
farklı işletim sistemlerinin, Hypervisor
tarafından fiziksel sunucu üzerinde kendisine sağlanan disk bölümlerine
kurulması gerekmektedir.
- Disk Alanı
Container teknolojisi ile Hypervisor teknolojisine göre
sanallaştırma için gerekli disk alanından önemli bir tasarruf sağlanmaktadır.
Sanal olarak koşturulan işletim sistemlerinin her birinin 7GB disk alanı, 2GB
RAM ve 1 Core gerektirdiğini düşünelim.
Hypervisor’lerle 64 core’luk işlemciye sahip bir
bilgisayara 20 adet sanal sunucu kurmak istediğimizde 20 x 7GB = 140GB bir disk
alanı, 20 x 2GB = 40GB RAM ve 20 x 1 = 20 Core’a ihtiyacımız olacaktır ve
bu kaynakların tamamı sadece işletim sistemi için kullanılacak olan
kaynaklardır.
20 adet sanal sunucu kurmak yerine LXC ile sanallaştırma
yaptığımızda ise sadece 7GB’lık bir disk alanı, 2GB RAM ve 1 Core bize yeterli olacaktır.
Hyporvisor’lerle yapılan sanallaştırma her
bir işletim sisteminin ayrı ayrı bakımının (güncellemelerin ve güvenlik
yamalarının) yapılması gerekmektedir.
Tek işletim sistemi içerisinde
LXC kullanılarak yapılan sanallaştırmada ise bir işletim sisteminin bakımı
yapılarak daha ekonomik bir yapı sunulur.
- Mimari yapı
Docker temel iki parçadan
oluşmaktadır. Birincisi Linux Kernel’la direkt iletişim halinde
olan Docker Daemon, ikincisi ise bu Daemon (Motor) ile iletişim
kurmamıza olanak tanıyan Docker CLI (Command-Line Interface)’dır.
Linux’ta hem Docker Daemon hem de Docker CLI doğal olarak direkt
Linux üzerinde koşmaktadır. Windows ve Mac OS X’te ise Docker CLI Windows ve Mac OS X
işletim sistemleri üzerinde koşmakta, Docker Daemon ise bu işletim
sistemlerinde bir Hypervisor (duruma göre VMware, VirtualBox, Hyperkit, Hyper-V) yardımıyla çalıştırılan
Linux üzerinde koşmaktadır.
Windows ve Mac OS X’te (konfigüratif olarak aynı zamanda
Linux’ta da) Docker CLI ve Docker Daemon TCP ile
haberleşmektedirler. Docker CLI’dan verilen komutlar TCP ile Engine’e iletilmekte ve işlenip
cevaplanmaktadır.
Aralarında TCP haberleşmesi
bulunduğundan aralarında TCP bağlantısı kurulabilen herhangi bir Docker CLI (Client) ile Docker Daemon’i konuşturmak mümkündür.
İşte anlatılan bu yöntemle Windows ve Mac OS X’te Docker çalıştırmak mümkün hale gelmektedir. Aşağıda verilen tabloda, vm ile dockerın karşılaştırılması yapılmıştır..
- Docker'ın Hedefi
Uygulamaların
kendi
bağımlılıkları yanında diğer önemli bir ihtayaç ise
uygulamaların çalışacağı işletim sistemlerinin hazır hale getirilmesi ve
yönetilmesi sürecidir.
Docker işte
tam bu noktada görev alarak, uygulamanın çalışabilmesi için
gerekli işletim sistemi ortamını hazır hale getirmede, saklamada, versionlamada,
paylaşmada sunduğu gereçlerle yazılım geliştirimi dışındaki operasyonel
işleri inanılmaz kolaylaştırmaktadır.
Uygulamaların
koştuğu işletim sistemlerindeki diğer bir gereksinim ise yönetim ihtiyacıdır.
Docker,
kullanıcılar tarafından hazırlanan işletim sistemi imajlarını, kolaylıkla
çalıştırabilmekte, versionlayabilmekte ve
sistem kaynaklarını (RAM, CPU, Network) kullanıcının belirttiği ölçüde ayırarak
yönetebilmektedir.
Hiç yorum yok:
Yorum Gönder