Docker Nedir?
Günümüzde artan teknoloji ile birlikte çoğu kişinin yazılım alanına kaydığı bir gerçektir. Yazılım dünyasında programcılar, mühendisler, veri tabanı yönetim sistemcileri, proje yöneticileri ve daha birçok alandan kişi çeşitli programları kullanarak bunların faydalarından yararlanmakta ve programlarını en iyi biçimde optimize ederek hızlı sonuç almaktadırlar. Birçok programlama dilinin yer aldığı yazılım dünyasında her koldan kişilerin çeşitli işlerle uğraştığı da görülmektedir. Ancak hangi dilde yazılırsa yazılsın ya da hangi alanda uygulama yapılırsa yapılsın en temel amaç yazılım programının hızlı, sorunsuz ve en iyi biçimde çalışmasıdır. Bu anlamda Docker, sizlere bu fırsatları sunan bir yazılım aracıdır. Docker’i kullanarak siz de programlarınızda elde etmek istediğiniz sonuçları görebilirsiniz. Peki Docker Nedir?
Docker; yazılım programlarını, uygulamaları hızlı biçimde derlemenizi, dağıtmanızı ve test etmenizi sağlayan bir yazılım platformu olarak karşımıza çıkar. Bununla birlikte Docker; yazılım programlarını sistem araçları, kod, çalışma zamanı ve kitaplıkları da dahil olmak üzere yazılımların en iyi biçimde çalışması için gerekli tüm bileşenleri içeren container adlı standartlaştırılan birimler halinde paketleme görevi de görür. Docker’i kullanarak hemen her ortama uygulamalarınızı hızlı biçimde dağıtabilir ve uygulamaları ölçeklendirebilir, kodun nasıl çalışacağından da daha emin olabilirsiniz.
Docker Nasıl Çalışır?
Docker’in çalışma mantığı, kodun çalıştırmanın standart bir yolunu sağlamaktır. Kodunuzun standart yolunu sağlayarak çalışan Docker, containerler üzerinde bir işletim sistemi görevi de görmektedir. Buna göre herhangi bir sanal makinenin sunucu donanımı üzerinde sanallaştırma etkisi üzerine benzer biçimde containerlar da bir sunucu üzerinde işletim sistemini sanallaştırır. Buna göre Docker her sunucuya yüklenmekle birlikte containerları başlatmak, oluşturmak ya da durdurmak gibi de çeşitli komutları sağlamaktadır.
Docker Neden Kullanılmalıdır?
Yazılım dünyasında her çalışan kişi kodlarının en hızlı, pratik ve doğru biçimde çalışmasını ister. Bunun için daha kısa ya da daha temiz kod yazmak ya da kod yapılarını belirli paketlere bölmek de yetmeyebilir. Bu anlamda Docker kullanımı bu gibi çalışan kişilere çeşitli kolaylıklar sağlamakla birlikte yine çeşitli imkanlar da sunarak kolay biçimde hedeflerini gerçekleştirebilirler. Docker kullanımı ile birlikte kaynak kullanımı geliştirebilir ve daha hızlı biçimde kod göndermeniz, uygulama işlemlerini standart hale getirmeniz, kodu en sorunsuz biçimde tanışanız ve haliyle kod ve zaman kaynaklı olarak tasarruf etmeniz de sağlanmaktadır.
Docker sayesinde her platformda en güvenilir biçimde çalışabilen bir nesneyi elinizde bulundurursunuz. Docker, içerisinde anlaşılır, basit ve kolay bir söz dizimi sayesinde size tam denetim de sağlamaktadır. Docker platformunun bu denli geniş çaplı kullanılması, Docker ile beslenmiş yazılım sistemlerini güçlü bir ekosistem olarak karşımıza çıkarmaktadır.
Docker’in Avantajları Nelerdir?
Docker birçok avantajı ile birlikte yazılımcılara çeşitli fırsatlar sunmaktadır. Docker’in sunmuş olduğu avantajları şu şekilde sıralamak mümkündür:
- Daha kısa sürede daha fazla yazılım sunma imkanı,
- İşlemleri standartlaştırmak,
- Uygulamaların sorunsuz bir şekilde taşınması,
- Hem kod satır sayısından hem zamandan hem de maliyetten tasarruf edilmesi
Docker kullanan kişilerin, Docker kullanmayan kişilere oranlara 7 kat daha fazla uygulama sunduğu bir gerçektir. Bu anlamda Docker, gereken süre sıklığında yalıtılan hizmetleri sunmanız için imkan tanımaktadır.
Docker platformu ile küçük container’li uygulamalar sorunları belirlemek, dağıtım yapmak ve düzeltme işlemleri için geri almayı size en kolay hale getirmektedir.
Docker tabanlı uygulamalarınızı yerel geliştirme makinelerinden diğer tüm makineler üzerine sorunsuz biçimde taşımanız mümkündür.
Docker sistemindeki yer alan containerler, her sunucu üzerinde daha fazla kod çalıştırmanızı kolaylaştıracak yapıyı sizlere sunmakta, kullanımınızı geliştirmekte ve tasarruf etmenizi de sağlamaktadır.
Docker, yazılım programlarının kurulu son hallerinin imajını alarak tekrar kullanılabilir hale gelmesini sağlamaktadır. Bu imajları sadece bir kere oluşturan Docker ile birlikte imajları diğer sunuculara rahatlıkla gönderebilir ya da her sunucu üzerinde farklı imajlar da oluşturabilirsiniz. Dockerlife ismi verilen talimat dosyalarına da bakarak her sunucu aynı imajı yeniden inşa etme özelliğine sahiptir. Bu anlamda manuel bir müdahaleye de gerek kalmaz.
Başka bir özellik ise Dockerlife ve imajların kolay biçimde geliştirilebilir olmasıdır. Talimatlar üzerine birkaç adım daha eklemek istediğinizde komutları an baştan ele almak yerine kaldığı son yerden devam etmeniz size zaman kazandıracakken daha kolay analiz etmenizi de sağlayacaktır.
Docker Hangi Durumlarda Kullanılmalıdır?
Docker sistemini modern anlamda platform ve uygulamalar geliştirmek için temel yapı olarak kullanabilirsiniz. Docker, içerisinde dağıtılmış mikro hizmet mimarilerini oluşturarak bunu çalıştırmanızı, kodunuz üzerinde standartlaştırılmış olan sürekli entegrasyon ve teslim işlem hatları ile dağıtmanızı kolaylaştırmaktadır. Ayrıca yine yüksek oranda ölçeklenebilir veri işleme sistemleri oluşturmanıza da destek veren Docker sayesinde geliştiriciler tam olarak yönetilen platformlar üzerinden uygulamalarını en kolay ve en hızlı biçimde gerçekleştirebilir.
Daha da yalınlaştırmak gerekirse, Docker’i şu alanlarda kullanabilirsiniz:
- Mikro hizmetler,
- Sürekli entegrasyon ve teslim,
- Veri işleme,
- Hizmet
Docket containerlar sayesinde standart yapıdaki kodların dağıtımı avantajından yararlanarak dağıtılmış olan uygulama mimarilerini oluşturabilir ve ölçeklendirebilirsiniz.
Ortamların standartlaştırılması ve dil yığınları ile birlikte sürümler arasındaki gerçekleşen çakışmaları ortadan kaldırabilir ve uygulama teslimlerini hızlandırabilirsiniz.
Hizmet anlamında Docker kullanarak büyük veri işleme çözümü sağlamanız mümkündür. Analiz paketleri ve verileri containerlar tarafından paketleyebilirsiniz.
Yine Docker alt yapısı ile Bilişim Teknolojileri (BT) tarafından ele alınan, yönetilen ve güvenli içerik, alt yapı ile dağıtılabilen uygulamalar oluşturarak sunabilirsiniz.
Container
Günümüzde bir uygulamayı daha kolay ve hızlı yöntemlerle çalıştırmak için sanal makineler yerine boş yere sistem kaynakları ya da işletim sisteminin kullanımını gerektirmeyen bir teknolojiye ihtiyaç vardır. Bu anlamda container çok önemli bir yapı olarak karşımıza çıkmaktadır. Artık eskisine göre uygulamaların çalıştırılabilmesi için sunucu üzerinde sanal makine oluşturup harici olarak işletim sistemi kurmak yerine, sunucu üzerinde sadece tek bir işletim sistemi kurup, bu işletim sistemi üzerinden containerler oluşturularak uygulamaları daha hızlı çalıştırmak mümkündür.
Container yapısı, sanal makineden farklı biçimde üzerinde uygulamaları çalıştırabilmek amacıyla misafir işletim sistemine hiçbir şekilde ihtiyaç duymamaktadır. Bu anlamda uygulamalarınızı daha iyi çalıştırmak için boot etmenize de gerek kalmamaktadır. Bu yapı sayesinde de uygulamanızı birkaç saniye içerisinde çalıştırmanız mümkün hale gelmektedir. Container yapısı üzerinde sadece tek bir işletim sistemi olup, o işletim sistemi de çalışır durumda ve tüm containerlar da güvenli biçimde bu işletim sistemini paylaşmaktadır.
Docker, LXC sanallaştırma mekanizması üzerine kurulu bir sistemdir. Bir Docker imajı, container yapılarında çalıştırmaktadır. Bunu oyunculara verilen rol olarak da düşünebiliriz. Her bir container yapısı bir process kullanmaktadır. Bir makine üzerinde, makine gücüne de bağlı olarak, binlerce docker containerlerinin çalışmasını görmek mümkündür. Container imajları ortak yapıdaki sistem dosyalarını paylaşmaktadırlar. Bu sayede disk tarafında da tasarruf edilmektedir. Şu şekilde de görüldüğü üzere uygulama için kullanılan containerler ortak exe ve kütüphaneleri kullanmaktadır. Fakat diğer kısımda klasik sanal makine sistemlerinde (VM, VirtualBox gibi..) her bir uygulama için ayrı ayrı işletim sistemi ve kütüphane dosyaları ayrılmak zorundadır.
Docker(Container) İle Sanal Makine Arasındaki Farklar Nelerdir?
Docker ile sanal makineleri çeşitli özelliklerine göre kıyaslamak mümkündür. Buna göre Docker üzerinde, uygulamaları sadece tek bir işletim sistemi üzerinde container yapıları kullanılarak izolasyon yapılabilir. Sanal makine teknolojisinde de bu yapı, Hypervisor yapısı üzerinden yer alan sistemleri işletim sistemi seviyesinde ayırmak ile elde edilir. Bu temel farktan dolayı, Docker sisteminin sanal makine sistemlerine göre daha dinamik bir yapıda olduğu da görülmektedir.
Docker, kaynak yönetimi noktasında da sanal makine sistemlerinden daha öndedir. Bu anlamda tamamıyla sanallaştırılan bir sistem, sadece kendisi için ayrılan bir alanı kullanabilmektedir. Bu şekilde en minimum seviyede kaynak paylaşımı gerçekleştirebilir. Diğer açıdan bakıldığında Docker sistemler, sistemde çalışmakta olan containerler arasında kaynak kullanımını akıllı ve akıcı biçimde gerçekleştirebilir.
Örnek vermek gerekirse Docker üzerinde iki tane container olsun. Bir container CPU kullanmazken, diğer container CPU’nun tüm gücünden yararlanabilir. Sonuçta bakıldığında optimize edilen bir container sistemi, sanal makinelere göre daha fazla uygulamayı sistemde tutmaktadır.
Yazılım geliştirme süreçlerindeki en birincil sorunlardan birisi de yazılım sisteminin sunucu ortamı üzerine taşınmasıdır. Docker, bu anlamda daha etkili bir sistemdir. Depolama, ağ ve işletim sistemi gibi etkenleri uygulamadan soyutlaştırma özelliği ile uygulamayı tüm bu detaylardan özgür bırakmayı amaçlar. Buna göre gerçekleştirdiğiniz bir containeri başka bir ortama taşımanız durumunda çalışma garantisini de elde edebilirsiniz.
Docker Güvenli mi?
Yazılım sistemleri üzerinde güvenlik konusu her zaman için önem taşımıştır. Buna göre akıllara da Docker sisteminin güvenli olup olmadığı gelmektedir. Docker sistemi güvenlik konusunda yazılımsal anlamda çözümleri de beraberinde getirmiştir. Container içerisinde çalışan herhangi bir uygulama, diğer container içerisinde yer alan uygulamaları herhangi bir istisnai işlem olmaksızın göremez ya da etkileyemez.
Kendini sürekli olarak yenileyen ve geliştiren Docker sistemi, gelecekte daha güvenli bir sistem olarak karşımıza çıkacak olup daha stabil ve güvenilir bir sistem haline de gelecektir.
Genel Anlamda Docker ve Container Sistemleri
Tüm bu bilgiler eşliğinde Docker ve Container sistemlerinin yazılım sistemlerinin olmazsa olmazları arasında görülebilir. Yazılım dünyasında çalışmakta olan birçok kişi geliştirmiş oldukları sistemlerin daha optimize, hızlı ve kolay çalışması adına sanal makineler üzerinden sunucular kullansa da bu etkili bir yöntem değildir. Daha iyi sonuçlar alınması ve sistemlerin en etkili biçimde kullanılması adına Docker sistemler kullanılabilir.
Çünkü Docker alt yapısına sahip uygulamalar çeşitli containerlere bölünerek gerek kod yapısından gerekse de zaman açısından sizlere tasarruf sağlamaktadır. Bu anlamda yerel ya da global anlamdaki yazılım projelerinizi daha yönetilebilir hale getirmek, daha hızlı sonuçlar görmenizi sağlamak ve daha kolay hale getirmek için Docker sistemleri kullanmanız önerilmektedir.
Kubernetes konusunda yazımı okumak için