bilgiliadam
Yeni Üye
Docker, yazılım geliştiriciler ve sistemciler için geliştirilen açık kaynaklı bir sanallaştırma platformudur Docker ile Linux, Windows ve MacOSX üzerinde Linux ve Windows sanal containerler (makineler) çalıştırabilirsiniz Bu platform sayesinde web sistemlerinin kurulumunu, testini ve dağıtımını kolaylıkla gerçekleştirebilirsiniz En önemli özelliği belki de Benim bilgisayarımda çalışıyordu, sunucuda neden çalışmadı acaba?sorununu ortadan kaldırıyor olması
Docker’ın sanallaştırma yapısı, bilinen sanal makinelerden (VirtualBox, Vmware vb) farklı olarak bir Hypervisor katmanına sahip değildir Bunun yerine Docker Engine üzerinden, konak işletim sistemine erişmekte ve sistem araçlarını paylaşımlı kullanmaktadır Böylece klasik VM’lere göre daha az sistem kaynağı tüketmektedir
Docker, LXC sanallaştırma mekanizması üzerine kurulu Bir Docker imajı, container denilen birimlerde çalıştırılıyor Her bir container bir süreç (process) kullanıyor Bir makinada gücüne bağlı olarak binlerce docker containerı birden çalışabilir Container imajları ortak olan sistem dosyalarını paylaşıyorlar Dolayısıyla disk alanından tasarruf ediliyor Şekilde görüldüğü gibi uygulama containerları ortak bin(exe) ve kütüphaneleri kullanıyorlar Ancak klasik sanal makine sistemlerinde her bir uygulama için ayrı işletim sistemi ve kütüphane dosyaları ayrılmak zorunda
Docker, yazılımların kurulu son hallerinin imajını alıp tekrar kullanılabilir olmasını sağlıyor Bu imajları bir kere oluşturup diğer sunuculara gönderebilirsiniz ya da her sunucuda farklı imajlar oluşturabilirsiniz Dockerfile adı verilen talimat dosyalarına bakarak her sunucu aynı imajı yeniden inşa edebilir Bu sayede manuel bir müdahale gerekmez
Bir diğer özellik ise Dockerfile ve imajların geliştirilebilir olması Talimatlara birkaç adım daha eklemek isterseniz en baştan komutları vermek yerine kaldığı son yerden devam ediyor ve bu da zaman kazandırıyor
7Klasik VM vs Docker
VM’ler her bir çalışan örneği için full bir işletim sistemine sahiptir Docker ise hem full işletim sistemi yerine boyut olarak küçültülmüş imajları kullanır hem de konak işletim sistemi kütüphanelerini paylaşımlı olarak kullanır Fakat bu durum, Docker’i sistem kaynak tüketim dostu yaparken, izolasyon seviyesini ise düşürmektedir Bunlarla birlikte aşağıdaki karşılaştırmaları yapabiliriz
Kıyas türüVM DockerOS Tam işletim sistemi Küçültülmüş işletim sistemi imajıIzolasyon YüksekDaha düşükÇalışır hale gelmesiDakikalarSaniyelerVersiyonlamaYokYüksekKolay paylaşılabilirlikDüşükYüksek
Her iki sanallaştırma yaklaşımın birbirlerine göre avantaj ve dezavantajları mevcut Ancak, Docker yönünden bakıldığında bazı avantajların çok kritik olduğunu söylemek doğru olur
Bunlarında başında kolay çalışması geliyor Docker Hypervisor kullanmadığından, tam yüklü bir işletim sistemi kullanmadığından ve konak sisteme yakın çalıştığından saniyeler içinde çalışır Bir diğeri ise versiyonlamaya yatkınlığı Docker’ın en vurucu özelliklerinden biride versiyonlanabilme özelliği Docker, kullandığı işletim sistemi imajlarının farklı hallerini kayıt altında tutmamıza olanak sağlar Bu durum ise, hazırlanan imajların kullanıcılar arasında paylaşılmasına kapı aralamaktadır Bir başka özelliğe daha değinecek olursak bu da paylaşılabilirlik Kullanıcılar veya dağıtıcılar tarafından hazırlanan işletim sistemi imajları, merkezi sunuculara gönderilebilmekte ve aynı zamanda diğer kullanıcılar tarafından bu merkezi sunuculardan elde edilebilmektedir
Containerların tek bir işletim sisteminde çalışması, akıllara güvenlik sorununu getirmektedir Docker bu konuya yazılımsal çözümler getirmiştir Container içerisinde çalışan uygulamalar başka bir container içerisindeki uygulamayı aksi belirtilmedikçe göremez ve etkileyemezler bir başka deyişle izoledirler
Docker’ın sanallaştırma yapısı, bilinen sanal makinelerden (VirtualBox, Vmware vb) farklı olarak bir Hypervisor katmanına sahip değildir Bunun yerine Docker Engine üzerinden, konak işletim sistemine erişmekte ve sistem araçlarını paylaşımlı kullanmaktadır Böylece klasik VM’lere göre daha az sistem kaynağı tüketmektedir
Docker, LXC sanallaştırma mekanizması üzerine kurulu Bir Docker imajı, container denilen birimlerde çalıştırılıyor Her bir container bir süreç (process) kullanıyor Bir makinada gücüne bağlı olarak binlerce docker containerı birden çalışabilir Container imajları ortak olan sistem dosyalarını paylaşıyorlar Dolayısıyla disk alanından tasarruf ediliyor Şekilde görüldüğü gibi uygulama containerları ortak bin(exe) ve kütüphaneleri kullanıyorlar Ancak klasik sanal makine sistemlerinde her bir uygulama için ayrı işletim sistemi ve kütüphane dosyaları ayrılmak zorunda
Docker, yazılımların kurulu son hallerinin imajını alıp tekrar kullanılabilir olmasını sağlıyor Bu imajları bir kere oluşturup diğer sunuculara gönderebilirsiniz ya da her sunucuda farklı imajlar oluşturabilirsiniz Dockerfile adı verilen talimat dosyalarına bakarak her sunucu aynı imajı yeniden inşa edebilir Bu sayede manuel bir müdahale gerekmez
Bir diğer özellik ise Dockerfile ve imajların geliştirilebilir olması Talimatlara birkaç adım daha eklemek isterseniz en baştan komutları vermek yerine kaldığı son yerden devam ediyor ve bu da zaman kazandırıyor
7Klasik VM vs Docker
VM’ler her bir çalışan örneği için full bir işletim sistemine sahiptir Docker ise hem full işletim sistemi yerine boyut olarak küçültülmüş imajları kullanır hem de konak işletim sistemi kütüphanelerini paylaşımlı olarak kullanır Fakat bu durum, Docker’i sistem kaynak tüketim dostu yaparken, izolasyon seviyesini ise düşürmektedir Bunlarla birlikte aşağıdaki karşılaştırmaları yapabiliriz
Kıyas türüVM DockerOS Tam işletim sistemi Küçültülmüş işletim sistemi imajıIzolasyon YüksekDaha düşükÇalışır hale gelmesiDakikalarSaniyelerVersiyonlamaYokYüksekKolay paylaşılabilirlikDüşükYüksek
Her iki sanallaştırma yaklaşımın birbirlerine göre avantaj ve dezavantajları mevcut Ancak, Docker yönünden bakıldığında bazı avantajların çok kritik olduğunu söylemek doğru olur
Bunlarında başında kolay çalışması geliyor Docker Hypervisor kullanmadığından, tam yüklü bir işletim sistemi kullanmadığından ve konak sisteme yakın çalıştığından saniyeler içinde çalışır Bir diğeri ise versiyonlamaya yatkınlığı Docker’ın en vurucu özelliklerinden biride versiyonlanabilme özelliği Docker, kullandığı işletim sistemi imajlarının farklı hallerini kayıt altında tutmamıza olanak sağlar Bu durum ise, hazırlanan imajların kullanıcılar arasında paylaşılmasına kapı aralamaktadır Bir başka özelliğe daha değinecek olursak bu da paylaşılabilirlik Kullanıcılar veya dağıtıcılar tarafından hazırlanan işletim sistemi imajları, merkezi sunuculara gönderilebilmekte ve aynı zamanda diğer kullanıcılar tarafından bu merkezi sunuculardan elde edilebilmektedir
Containerların tek bir işletim sisteminde çalışması, akıllara güvenlik sorununu getirmektedir Docker bu konuya yazılımsal çözümler getirmiştir Container içerisinde çalışan uygulamalar başka bir container içerisindeki uygulamayı aksi belirtilmedikçe göremez ve etkileyemezler bir başka deyişle izoledirler