Docker Mimarisine Giriş
Merhabalar,
Sizlerle bu yazımızda docker mimarisine bir bakış atacağız. Docker, uygulamaları bir yazılım konteyner(container) içerisinde kurmamıza, çalıştırmamıza yarayan açık kaynak bir teknolojidir. Burada kısaca konteyner(container) kavramına da değinecek olursak konteyner, bir sistem sanallaştırma metodudur. Çalışan işlemlerin kaynaklarını ve bağlılıklarını izole eder. Yani docker elimizdeki bir uygulamanın daha doğrusu bir işlemin process bazında sanallaştırmasına yarıyor.
Docker’ın geçmişine kısaca bakacak olursak LXC üzerine geliştirilmiş bir teknolojidir. LXC, linux sistemlerdeki konteyner mekanizmasıdır. Fakat bir takım yönlerden eksikleri vardır. Konteyner yönetimi zor ve karmaşık bir yapıya sahiptir. Docker, LXC’deki eksik ya da karmaşık yapıları düzenlemiş ve kullanımı daha kolay hale getirmiştir. İlk olarak LXC üzerine geliştirilmiş fakat daha sonra ayrı bir proje olarak ilerlemiştir.
Buraya kadar docker ve geçmişi hakkında kısa bilgiler edindik. Şimdi bildiğimiz sanallaştırmalar ile process bazlı sanallaştırmaları karşılaştıralım. Sol şekilde hepimizin bildiği klasik sanallaştırma mimarisi sağ şekilde ise docker sanallaştırma mimarisi yer almaktadır.
Şekilleri inceleyecek olursak soldaki sanallaştırmada her bağımsız bir uygulama için bir işletim sistemi kurup üzerine uygulamamızı kurup çalıştırmamız gerekiyor. Yani bir apache tomcat için bir ubuntu kurduğunuzu düşünün. Büyük bir zaman, işlem gücü ve alan kaybı. Bu tarz klasik sanallaştırmalar process bazlı işlemler için gereksiz bir yöntemdir. Fakat sağdaki docker sanallaştırmasına bakar isek mevcut bir işletim sistemimiz ve üzerine kurulu bir docker engine var. Bu docker engine üzerinde tanımlanan her bir processi sanki ayrı bir host gibi hareket ettirerek izole eder. Yani açmak gerekirse her bir process aslında kendi başına bir hosttur. Haliyle de birbirinden izole edilmiştÖ ceir. Yani bir apache tomcat kuracak isem ayağa kalkması için gerekli kütüphaneleri kurmam kafi olacaktır.
Biraz da docker kurulumu üzerine konuşalım. Kurulum demişken nasıl kurulacağını anlatmaktan ziyade işletim sistemlerinde nasıl çalıştığından bahsedeceğim aslında. Docker, windows, mac ve linux tabanlı işletim sistemlerini destekler. Fakat burada bir şey dikkatimizi çekmeli. Bahsettiğimiz gibi Docker LXC üzerine kurulmuş bir projedir. Yani linux tabanlı işletim sistemlerinde çalışır. Fakat diğer işletim sistemlerini nasıl destekliyor ? Burada kısa bir docker terminolojisine girip bir takım kavramları açıklamak gerekiyor.
Docker’ın çalışmasını kısaca adım adım anlatacak olursak önce docker-client(CLI ya da docker toolbox) ile docker-daemon’a komutlar iletilir. Ve docker-daemon üzerinde komutlar işlenir. Anlaşılacağı gibi docker-client bizim CLI ya da -mac için- docker toolbox ile komutları girdiğimiz parçadır. Docker-daemon ise konteyner’ların oluşturulduğu ayağa kaldırıldığı parçadır. Docker-daemon normalde linux host ile direkt olarak konuşabiliyor. Fakat windows ya da mac gibi sistemlerde bu farklı şekilde sağlanıyor. Bu işletim sistemlerine docker kurulumu yapılırken ya hypervisor ile temel linux bileşenleri içeren bir VM oluşturuluyor ya da windows için windowsun kendi container sistemi kullanılıyor.
Son olarak docker terminolojilerine değinelim ve yazımızı sonlandıralım. Sırayla dockerdaki temel terimleri açıklayacağım. İlerleyen zamanlar yazacağım yazılarda bu terimleri bolca kullanacağım için öğrenip aşina olmanız çok önemli.
Docker-Client: Belirttiğim gibi docker’a komut girebilmek için client ile etkileşime giren parçadır.
Docker-Daemon: Docker’ın komutları uyguladığı ve processlerini çalıştırdığı parçasıdır. Uygulamalar bu parça tarafından derlenir, çalıştırılır. Processlere kaynak ayrımı gibi işlemler bu parçada yapılır.
Konteyner(Container): Sanallaştırılmış her bir processe verilen isimdir.
Dockerfile: Oluşturacağımız uygulamayı tanımladığımız dosyadır. Yani uygulamamızın hangi kütüphanelere gereksinim duyduğu, hangi komutları çalıştırmamız gerektiği gibi bir takım tanımlamaların yapıldığı dosyadır. Bir sonraki yazımızda detaylıca inceleyeceğiz.
Image: Kısaca derlenmiş Dockerfile olarak tanımlanabilir. Bir Dockerfile tanımlanıp derlendikten sonra bir image haline gelir ve biz image çalıştırarak konteyner elde etmiş oluruz.
DockerHub: Docker’ın githubı olarak düşünülebilir. Docker ile oluşturduğumuz image’ları burada başkalarıyla paylaşabilir ya da onların paylaştıklarını kullanabiliriz.
Evet arkadaşlar, temel seviyede bir docker girişi yapmış bulunmaktayız. İlerledikçe docker üzerine daha başka bilgiler öğrenecek, uygulamalar geliştireceğiz.
Bir diğer yazımızda görüşmek üzere…