Container Dünyası ve Docker
Son zamanlarda bulut bilişimle sıkça uğraşıp da Docker’ı duymayanınız yoktur sanırım. Container yapılarının bulut dünyasında yaygınlaşmasıyla birlikte, Docker da artık çoğu yazılımcının hayatına girmeye başladı. Özellikle geçtiğimiz yaz ilk stabil sürümünü duyurduktan sonra, geçen senenin en popüler teknolojileri listesinde kendisine ön sıralardan yer bulan Docker, 2016’da da bu listeden çıkmayacak gibi görünüyor.
Bir Zamanlar IT Dünyası
Çok değil, bundan yaklaşık on sene önce şirketlerimizde bugünkü gibi gereksinimleri karşılayacak uygulamalar geliştiriyorduk. Tabii bir de uygulamalarımızın çalışacağı ortamlara, yani fiziksel sunuculara ihtiyacımız oluyordu. Ancak bu süreçler bugünkü kadar kolay ilerlemiyordu. Gerekli sunucuların temin edilmesi, uygun bir işletim sisteminin kurulması, güvenlik açığı oluşturmaması için işletim sistemi güncelleştirmelerinin yapılması, sunucuların kablolama ve ağ ayarlarının yapılması ve buna benzer pek çok süreçle uğraşıyorduk. Tüm bunların yanı sıra üretim ortamına geçmek gibi en az bu operasyonel işler kadar sancılı, saatlerimizi hatta bazen günlerimizi alan uzun süreçlerimiz de olmadı değil.
Hypervisor Çok Yaşa!
Derken hayatımıza hypervisor denilen sanallaştırma teknolojisi girdi. Hypervisor, birden fazla işletim sisteminin aynı donanımı paylaşabilmesini sağlıyor. Şu an piyasada vSphere, Hyper-V ve KVM gibi pek çok hypervisor bulunmakta. Hatta meraklısı için Xen adında açık kaynak kodlu bir hypervisor bile mevcut. Sanallaştırma teknolojisi sayesinde artık tek bir fiziksel makinada çok sayıda sanal makina oluşturabiliyoruz. Bu da demek oluyor ki yeni bir uygulama geliştirdiğimizde artık yeni bir fiziksel sunucu almamıza gerek kalmayacak. Önceden bir fiziksel sunucuda tek bir uygulama çalıştırabiliyorken, şimdi hypervisor sayesinde birbirinden izole bir şekilde fiziksel sunucumuzun donanımına bağlı olarak birden fazla uygulama çalıştırabilir hale geldik.
Şirketler açısından sanallaştırma teknolojisinin birçok avantajı var. Her yeni uygulama için farklı bir sunucu satın almak yerine halihazırda varolan sunucuda, yeni bir sanal makine oluşturarak yatırım maliyetlerini düşürme imkanı elde ediyorsunuz. Ayrıca yeni bir sunucunun getireceği operasyonel işlerden ve yüksek bakım maliyetlerinden de kurtulmuş oluyorsunuz.
Sanal makinelerin her ne kadar hayatımızı büyük oranda kolaylaştırdığı tartışılmaz bir gerçek olsa da günümüz şartlarında hala tam verimli bir çözüm sağlamamaktadır. Bildiğiniz gibi her sanal makine kendi üzerinde bir misafir işletim sistemi çalıştırıyor. Bu işletim sistemi de kendi çalışmalarını yürütebilmek adına doğal olarak CPU, RAM ve HDD gibi kendine ayrılmış sanal kaynakları kullanıyor. Üstelik üzerinde henüz uygulamanız çalışmıyorken bile sistem kaynaklarının bir kısmını tüketmesi bizleri yeni yöntemler aramaya iten başlıca sebeplerden sadece bir tanesi.
Sanal makinelerin bir diğer olumsuz tarafı ise; eğer Microsoft Windows gibi lisans gerektiren bir işletim sistemi kullanıyorsanız, oluşturacağınız her bir sanal makine için ayrı lisans ücreti ödüyorsunuz. Sonuç olarak baktığınızda hem kaynak hem de bütçe kaybı yaşıyorsunuz.
Container Diye Bir Şey Var
Günümüzde bir uygulamayı çalıştırabilmek için sanal makinelerin aksine, işletim sistemi ve boş yere sistem kaynaklarının kullanımını gerektirmeyen bir teknolojiye ihtiyacımız vardı. Tam da bu noktada container denilen yapılar ortaya çıktı. Artık uygulamalarımızı çalıştırabilmek için sunucu üzerinde hypervisor ile sanal makine oluşturup misafir işletim sistemi kurmak yerine, sunucu üzerine sadece bir tane işletim sistemi kurup, bu işletim sistemi üzerinde user space denilen alanlarda containerlar oluşturarak içerisinde uygulamalarımızı çalıştırabiliyoruz.
Container, sanal makineden farklı olarak üzerinde uygulama çalıştırabilmek için misafir işletim sistemine ihtiyaç duymuyor. Haliyle uygulamamızı başlatmak için de boot etmemiz gereken bir sistem yok. Bu da uygulamamızı saniyeler içerisinde çalıştırabilmemizi sağlıyor. Container yapısında tek bir işletim sistemi var, o da zaten çalışıyor ve tüm containerlar güvenli bir şekilde bu işletim sistemini paylaşıyorlar. Tam da aradığımız şey öyle değil mi?
Sanal makineden çok daha küçük ve çok daha verimli olan container yapıları aslında yeni bir teknoloji değil. Hatta geçmişi 2000’li yılların başına FreeBSD Jails’a kadar dayanıyor. Şu an günümüzde pek çok container teknolojisi mevcut. Docker da bunların arasında en çok bilineni ve popüler olanı. Docker’ın yanı sıra CoreOS tarafından geliştirilen rkt adında açık kaynak kodlu bir container teknolojisi daha mevcut. PaaS hizmeti veren dotCloud isimli bir startup’ın kendi müşterilerinin gereksinimlerini karşılayabilmek için container teknolojisini kullanmasıyla birlikte bugünkü Docker’ın temelleri atılmıştı. Daha sonra firma PaaS hizmetini bırakıp container teknolojisine odaklandı ve şirketin adını Docker olarak değiştirdi.
Docker, uygulamanızın kaynak kodlarıyla beraber runtime, sistem kütüphaneleri ve konfigürasyon gibi uygulamanızın çalışması için gerekli olan her şeyi standart bir paket haline getirip ortamdan(geliştirme, test, üretim) bağımsız bir şekilde çalıştırabilmenizi ve dağıtabilmenizi sağlayan Go dili ile geliştirilmiş açık kaynak kodlu bir container teknolojisidir. Bu sayede geliştirme ortamında çalışan uygulamanızın üretim ortamında da aynı şekilde çalışacağından emin olabiliyorsunuz. Böylelikle “Benim makinede çalışıyor abi!” devri de kapanmış oluyor.
Geçen sene Ekim ayında New York tabanlı bir firma olan Tutum‘u kendi bünyesine katan Docker, bu yıl Ocak ayında da Unikernel Systems şirketini satın almıştı. Hızla büyümeye devam eden Docker, kısa süre önce Docker Datacenter ve Docker Cloud isimli yeni iki hizmetini duyurdu. Docker Datacenter, container ve deployment servislerini kurumsal anlamda kendi sunucularımızda ya da private cloud sistemlerimizde kolaylıkla yönetebilmemize olanak sağlıyor. Docker Cloud ise Docker uygulamalarımızı yönetebildiğimiz ve farklı bulut servislerine deploy edebildiğimiz bir bulut hizmetidir.
Microsoft Tarafında Neler Oluyor?
Container teknolojisi konusunda Microsoft tarafında da büyük gelişmeler var. Yaklaşık bir yıl kadar önce Microsoft ve Docker, iş ortağı olarak Docker ekosistemini bir sonraki sunucu işletim sistemi olan Windows Server 2016’ya getirmeyi planlıyorlar. Microsoft, Windows Server 2016’da Windows Container ve Hyper-V container olmak üzere iki farklı container yapısı olacağını duyurdu. Daha detaylı bilgiye buradan ulaşabilirsiniz. Meraklıları varsa Azure üzerinde bir sanal makineye Windows Server 2016 önizleme sürümünü kurup deneyebilirler.
Microsoft’un container teknolojisi için yaptığı bir diğer çalışma da Docker Client uygulamasını Windows’a taşımak oldu. Docker Client uygulaması sayesinde Windows makinenizden ister Linux isterseniz Windows Server sunucunuzda bulunan container’larınızı rahatlıkla yönetebilirsiniz. Agile, DevOps ve Microservice gibi kavramların sıkça duyulduğu günümüzde umarız en kısa zamanda container yapıları Windows tarafında da olgunlaşır ve kurumsal projelerimizde kullanabilir hale geliriz.
1 Comment
Ugur ersoy
9 Eylül 2018 at 19:59Benim gibi nooblar icin inanilmaz guzel bir yazi olmus. Tesekkur ederim.