docker

Selamlar, bugün sizlere container sanallaştırma teknolojisi ve container sanallaştırma teknolojisi denilince akla ilk gelen docker’ ı anlatacağım.

Şimdiden iyi okumalar dilerim…

Docker’ı daha iyi anlayabilmek için, bir uygulamayı tüm bağımlılıklarıyla birlikte kolayca paketleyebildiğinizi ve ardından onu farklı geliştirme, test ve üretimde sorunsuz bir şekilde çalıştırabildiğinizi hayal edin. İşte açık kaynaklı docker projesinin amacı tamda budur.

Docker, bir uygulamayı konteyner adı verilen izole bir kutu içerisinde çalıştırmaktadır. Bu kutunun docker kurulu olan sunucu üzerinde izole edilmesi sayesinde birden fazla izole edilmiş, birbirinden bağımsız konteyner çalıştırabilir ve her bir konteyner üzerinde farklı uygulamalar çalıştırılabilmektedir.

konteyner

Konteynerler aslında birer sanal makine olarak çalışmaktadır. Bu sanal makinelerin iso dosyaları docker da image olarak isimlendirilmektedir. Ancak docker bir sanal makineden farklı olarak, tam bir sanal işletim sistemi oluşturmak yerine uygulamaların üzerinde çalıştıkları sistemle aynı Linux çekirdeğini kullanmalarına izin verir. Bu, özellik ile önemli bir performans artışı sağlar ve uygulamanın boyutunu azaltır.

Sanal Makine ve Container Karşılaştırması

Genel olarak konteyner üzerine yüklenen işletim sistemleri minimal bir kurulum içermektedir ve bu sayede çok kısa sürede (saniyeler içerisinde) kullanıma sunulmaktadır.

Konteynerler yüklemek istediğiniz paketleri kendiniz yükleyerek istediğiniz şekilde genişletebilirsiniz. Konteyner platformu bir ana işlemci(main process) mantığıyla çalıştığı için konteynerler üzerinde veriler biriktirilmesi önerilmemektedir.

Docker

Docker open source(açık kaynak) bir konteyner sanallaştırma teknolojisidir. Kurmuş olduğunuz işletim sistemi üzerinde doğrudan çalışabilmektedir. İşletim sistemi üzerinde birbirinden izole bir yapıya sahip yüzlerce container oluşturabilirsiniz. Kaynaklar çok ufak boyutlarda paylaştırılarak saniyeler içersinde bir işletim sistemi kurulabilir. Mikro servis olarak çalıştığı için temelinde main process (ana işlemci) bir yapıyla çalışmaktadır.

Docker temel olarak 2(iki) teknolojiyi kullanarak hizmet sunmaktadır. Bunlar LXC ve AUFS’ dir.

LXC yani Linux Containers Linux işletim sistemleri üzerinde var olan bir yapıdır. LXC ile düzensiz Unix işlemleri yüksek seviyede izole ederek birden fazla processin çalışmasına olanak sağlar.

AUFS (Advanced multi layered unification filesystem) ise benzersiz, copy-on-write dosya sistemleri oluşturulur.

Docker Tarihçesi

Docker Linux Kernel’ e 2008 yılında eklenen Linux Containers(LXC) üzerine kurulu bir teknolojidir. Aslında Docker tarafından yapılan hemen hemen herşey Linux Containers ile yapılabilmekteydi. Ancak LXC ile yapılacak işlemler docker komutlarında olduğu kadar otomatik ve basit değil tamamen manuel olarak yapılmaktaydı. Son kullanıcı için bu işlem yorucu olmaktaydı. Docker aslında LXC’ in daha kullanılabilir hale getirilmiş daha basit ve kullanım kolaylığı sağlayan bir yapıdır. Google, amazon v.b. gibi bilişim sektörünün liderleri bu yapıyı kullandıklarını uzun yıllar önce açıklamıştır.

Docker Linux Containers üzerinde kurulu bir teknoloji olduğu için çalışması için bir Linux tabanlı bir işletim sistemine ihtiyaç duymaktadır. Linux işletim sistemi dışında Mac ve Windows işletim sistemleri üzerine kurulmak istenildiği zaman docker tarafından bir tane Linux işletim sistemli bir sanal makine kurularak onun üzerinde çalıştırılmaktadır.

Docker ismini konteyner(container) sanallaştırma platformu ile duyurmuştur. Konteyner sanallaştırma denildiği zaman akla ilk genel docker olmuştur. Akla ilk gelen Vmware, Hyper-V ve Xen v.b. gibi sanallaştırma platformlarından farklı olarak çalışmakta olan docker Linux sunucularında zaten hali hazırda var olan LXC(Linux Containers) hizmeti daha otomatik bir hale getirerek kullanıcılara daha kolay kullanılabilir bir hale getirerek container platformunun patronu olmuştur.

LXC

Docker Mimarisi

LXC tarafından container’ lara işletim sistemi tarafından sunulan dosya sistemi, ortam değişkenleri (Environment Variable) gibi fonksiyonlar her birine ayrı ayrı sağlanır. Tasarım olarak ilk başta oluşturuldukları zaman her bir container birbirinden izole edilmektedir. Eğer container’ lar birbirleri ile iletişim kurulması istenilir ise gerekli ayarlamalar yapılmaktadır.

Docker container mimarisinde LXC’ e göre getirdiği en büyük farkılık ise container yapısını metin bazlı image formatı ile tanımlanabilir bir yapı haline getirmesidir. Docker’ ın LXC’ ye göre getirmiş olduğu bir diğer farklılık ise kullanıcıların container içerisinde tek bir işlem(process) çalıştırmaya zorlamasıdır.

Bu şekilde LXC’ ye göre bazı daraltmalar yaparak kullanılması zor olan fonksiyonlar bile artık kullanılabilir bir hale getirilmiştir. Docker her bir container içerisinde tek bir process çalıştırılmasını zorlamasındaki asıl sebep container çok kısa süre içerisinde (saniyeler içerisinde) yeniden oluşturulması, yönetimi kolay ve kaynak ihtiyacı olduğu zaman kolay büyütülebilecek bir yapı oluşturulmak istenmektedir.

Örneğin bir container üzerinde nginx web server, postgresql database server ve ntp server çalışmaktadır. Eğer postgresql için kaynak ihtiyacı gerekir ise aynı image üzerinden yeni bir container oluşturulmak istenir ise diğer web server ve ntp server de kurulu gelecektir.

konteyner

Özet

Gereksiz olan uygulamaların kapatılıp gerekli konfigürasyonlar yapılması gerekecektir. Bunun yerine eğer her bir process ayrı ayrı container üzerinde çalışır ise kaynak sıkıntısı yaşayan container ilave olarak yeni container oluşturularak sadece o container üzerinde tek bir process çalışarak yönetimi, kaynak arttırımı, tekrar oluşturulması v.b. gibi durumlar çok daha hızlı ve birbirinden bağımsız uygulamalar olarak yapıla bilinecektir. Bu şekilde her bir container içerisinde tek bir process çalıştırılması ile Microservices yapısına temel atılmaktadır.

Docker temellerini aldığı LXC den bağımlılığını kesmek istemiştir. Bunun için kendi içerisinde libcontainer adında LXC yi aslında yeniden kodlayarak kendisi ile piyasaya sunmuştur. Bu çalışması ile docker, üzerinde çalışmış olduğu LXC den kurutularak artık bağımsız bir şekilde çalışmaktadır. LXC’ e bağımlı olması demek Docker’ ın gelişiminin LXC ile bağımlı olması demektir. Çünkü LXC üzerinde yani üzerinde çalışmaktaydı. Docker’ ın LXC bağımlı çalışması demek geliştirilmesindeki kararları Linux Kernel developer (Linux Çekirdek Geliştiricileri) tarafından alınmasıdır. Bu amaç ile Linux Kernel’ den bağımsızlık sağlanarak kararlar bağımsız ve docker geliştiricileri tarafından alınmaktadır.

LXC mimarisi

Yukarıdaki şekilde bir linux işletim sistemi yüklü sunucu üzerinde LXC mimarisi gösterilmektedir.

Kolay gelsin…

Kaynakça

ŞAHİN, O. (2019). Container ve Kubernetes Bileşenlerinin İşleyişi ve Sistem Yöneticilerine Olan Faydaları. Ankara: Hoca Ahmet Yesevi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Yüksek Lisans Dönem Projesi

Paylaş
Bağlantıyı kopyala