Docker

Linux işletim sistemleri için yazılım geliştirenlerin en sık karşılaştığı sorunlar birden çok Linux sürümü olmasıdır. Yani bir uygulamanın CENTOS da derlenmesi gerekliliği veya UBUNTU da gerekli bir paketin olmaması uygulamanın kullanımını engellemekteydi. Docker ise bu sorunları çözen bir paketleme sistemidir. Bir docker konteyner oluşturarak farklı Linux sistemlerinde dahi uygulamanın sorunsuz çalışmasını sağlayabiliyorsunuz.

Temel olarak özetlemek gerekir ise uygulamalarınızı bir konteyner içine koyup karşıdaki sunucu içine koyan bir teknolojidir.

Konteyner başlığı aslında şu noktada önemli, örneğin büyük bir konteyner gemisini düşünün, üzerindeki konteyner içeriğini bozmadan gideceği yere kadar götürmek ile sorumludur. Docker’ da aslında bunu yapıyor.

Peki, Azure ve Docker ikilisi bir arada düşünüldüğü zaman, varsayılan olarak Azure üzerinde deploy ettiğiniz yazılımlardan farkı nedir?

Örneğin siz bir uygulama geliştirip bunu Azure' a deploy ettiğiniz zaman Azure bir makine oluşturup bunu aslında bir sanal makine içinde çalıştırır. Siz her güncelleme yaptığınız zaman aslında bu sanal makine silinir ve yeniden deploy edilir.

Konteyner mantığında ise yine en temel bir host OS var, yani Hypervisor katmanı, ancak bir önceki örnekte olduğu gibi uygulamalar sanal makineler içerisinde değil konteyner içerisinde bulunur. Yani aslında bir nevi host OS üzerindeki sanal makineler gibi, ama farkı bu konteyner dediğimiz yapıda ek bir Windows çalışmaz.

İlk örnekte fiziksel makine üzerindeki sanal makinelerde de ek olarak Windows çalışırken konteyner mantığında konteynerleri tutan bir host var ama ek olarak Windows OS yok, yani tek bir Windows OS tüm konteynerleri yönetmektedir. Bu konteynerler de işletim sistemi gereksinimi yoktur ve konteynerler bir birlerinin dosyalarını görmezler. Güvenlik açısından baktığımız zaman bir vm öteki vm den nasıl habersiz ise bu durumda da benzer bir sınır vardır.

Örneğin siz 30 tane Azure müşterisi ile aynı miktarda işlemci ve network kullanıyorsunuzdur ( tabiki daha büyük sanal makine alan daha çok kaynak kullanıyordur ). Ancak konteyner de sanal OS olmadığı için tek OS kullanıyorlar. Bu nedenle host OS de bir takım değişiklikler yapılıyor.  Bir önceki yapıdaki Host OS’ nin amacı adil bir kullanıma yani eşit bir kullanımı hedeflerden konteyner yapısı için Host OS tüm bu konteynerleri aynı zamanda en iyi performansta çalıştırmak için değiştirilmiştir.

Docker aslında bir program, kendi bilgisayarınızdan cloud' a elinizdeki konteynerleri ulaştırmanızı sağlıyor. Benim bir konteynerim var, bunu Azure da çalıştır diyen aradaki bileşen aslında. Şu anda sadece Linux üzerinde çalışıyor, çünkü konteyner teknolojisi 5-6 yıldır Linux üzerinde bilinen bir yapı.

VM yapısına göre deploy çok hızlı, temelde Server’ a bir paket ulaştırıyorum ve sistem çalışmaya başlıyor. VM yapısında ise vm imajımın karşıya ulaşması gerekiyor, sonra kaynak dağıtımı, şifreleme, vm oluşturulması, Windows açılması derken çok uzun zaman alıyor.