Docker Nedir?

Son zamanlarda Windows Server 2016 ve Windows 10 işletim sistemlerine “adını yazdıran” bu platformu biraz inceleyelim.


Docker nedir?

Docker, dünyanın lider yazılım konteynır platformudur. Mart 2013 te tanıtımı yapılmıştır. Developerlar, “benim makinemde çalışıyor” problemini gidermek için Docker kullanılar. Kullanıcılar, uygulamadan daha yüksek performans elde edebilmek için, izole edilmiş konteynırlarda uygulamaları yan yana çalıştırarak Docker kullanırlar.

Docker bir Linux çekirdeğine sahiptir. Uygulamalar aslında bu Linux çekirdeğinin üzerindeki konteynırlar içerisine alınarak sanallaştırılırlar. Docker, Linux kullanmasına rağmen Windows, Mac ve Linux OS’lar üzerinde kullanılabilir. Cloud, AWS ve Azure yapılarını destekler.

Konteynır nedir?

Uygulamaları aynı imaj üzerinde birbirinden izole edilmiş halde, hızlı ve güvenilir bir şekilde tutan sanal kapsüllerdir. Uygulamlar bu kapsüler içerisinde çalıştırılır.

VM ile arasındaki fark nedir?

VM yapısında bir fiziksel donanım üzerinde Hypervisor, onun üzerinde VM sayısı kadar Guest Host, onun da üzerinde VM’ler bulur. Her bir VM bir işletim sisteminin –guest os- tam bir kopyasına sahiptir. Bir VM onlaca GB büyüklüğündedir ve açılması –boot- uzun sürebilir. VM yapısında B isimli uygulamanızı çalıştırmak için VM içerisine bir Guest OS kurmak zorundasınız. Üç uygulama çalıştırmak için üç ayrı OS kurmak zorundasınız.

Docker yapısında ise bir fiziksel donamın üzerinde Host OS, onun üzerinde Docker, onunda üzerinde konteynırlar bulunur. Aynı makine üzerinde bir den fazla konteynır çalışabilir. Konteynırlar tek bir Host OS’un binary kaynaklarını ortak olarak kullanılırlar ve birbirleri ile iyi izole edilmişlerdir. Konteynırlar VM’lerden daha az yer kaplarlar ve neredeyse anında başlarlar. Konteynır, sadece B isimli uygulamanızı içerir, Guest Os içermez. Uygulama Host OS üzerinde çalışır. C isimli uygulamanız için de bu böyledir. Böylece aynı OS üzerinde aynı uygulamanın farklı sürümlerini yan yana çalıştırma imkanına kavuşursunuz. Bunun için de onlarca GB harcamazsınız.

Docker, genellikle OS sanallaştırmak için değil, uygulama sanallaştırmak için kullanılır. Tabiki güçlü yapısıyla OS sanallaştırma da yapabilir. Developerlar için idealdir. Aynı uygulamanın farklı sürümlerini yan yana çalıştırabilirler. Audit ve troubleshoot için daha hızlı, güvenli ve rahat bir ortam hazırlar.

Konteynırlar ve VM’ler birlikte de çalışabilir. Bunun için aşağıdaki örnek resmi inceleyin.

Windows Server 2016 ve Windows 10 Docker için native support sağlar.

Docker Mimarisi

Aslında Docker’a, Docker Engine ismi verilen cilent-server uygulamasıdır diyebilmek mümkündür. Aşağıda Docker Engin’in basitçe çizilmiş bir mimarisi gözükmektedir.

Docker işlemcisi (client – CLI) konteynır oluşturmak, çalıştırmak, durdurmak, dağıtmak gibi işlevleri yerine getirmek için Docker Daemon (Server) ile konuşur. Server tarafına tüm komutar client üzerinden gönderilir. CLI, Docker’ın kullanıcı arayüzüdür.

Daemon (Server) sistemin kernel bölümüdür. Image, container, data volume, network gibi docker objelirini oluşturur ve yönetir. Bunu yapabilmek için Rest API taleplerini dinler.
CLI ve Daemon Rest API üzerinden TCP komutları ile konuşur. Bu iletişim şekli sayesinde Docker bütün platformlarda çalışabilmektedir.

Docker registries

Docker Image’lerinin tutulduğu bölümdür. Docker Hub ve Docker Cloud, herkesin kullanabileceği genel registriy alanlarıdır. Docker, varsayılan olarak Docker Hub üzerindeki image’lerini aramak üzere yapılandırılmıştır.

Docker Nesneleri

Docker kullandığınızda, image, container, network, volume ve diğer objeleri oluşturur ve kullanırsınız.

Images

Imajlar, bir container oluşturmak için talimatları olan salt okunur bir şablondur. Örneğin bir image içerisinde Apahce sunucusu veya WordPress uygulaması olabilir. Kendi imajlarınızı oluşturabilir veya Docker Cloud yada Docker Hub üzerindeki başkaları tarafından oluşturulmuş imajları kullanabilirisiniz. Kendi imajınızı oluşturmak için basit bir söz dizimi bulunan bir Docker dosyası oluşturursunuz. Bir Docker dosyası üzerindeki her talimat imaj üzerinde bir katman oluşturur. Docker dosyasını değiştirdiğinizde ve görüntüyü yeniden oluşturduğunuzda yanlıca değişen katmanlar yeniden oluşturulur. Docker dosyası, text formatındadır ve Dockerfile ismindedir.

Containers

Konteynır, bir imajın çalışan halidir. CLI sayesinde bir konteynır oluşturabilir, silebilir, taşıyabilir, çalıştırabilir, durdurabilir veya pause edebilirsiniz. Ayrıca bir veya birden çok network’e bağlayabilir, depolama alanı ekleyebilir veya geçerli ayarların baz alındığı yeni bir imaj oluşturabilirsiniz.

Konteynırlar varsayılan olarak diğer konteynırlardan ve host os’dan nistepeten iyi düzeyde izole edilmiştir. Bunu kontrol etmek mümkündür.Bir konteynır durdulduğunda kalıcı depolama alanında bulunmayan değişiklikler kaybolur.

Services

Servisler, konteynırları birden çok server’ı kapsayacak şekilde ölçeklendirebilmeyi sağlar. Yani orta – üüyük ölçekteki işletmelerde her bir işlemi CLI üzerinden yürütmek mantıklı değildir. Swarm, Compare gibi servisler kullanılarak büyük boyuttaki işleri daha kolay yönetilebilir.

Altında yatan teknoloji

Namespaces

Docker, Conteiner adı verilen izole edilmiş çalışma alanını sağlamak için namespaces adı verilen bir teknoloji kullanır. Bir container çalıştırdığınızda, Docker bu container için namespaces set’i oluşturur.

Bu namespaces’ler bir izolasyon katmanı sağlar. Bir container’in her bir yönü ayrı namespaces alanında çalışıtır ve iletişimi diğer namespaces’ler ile sınırlandırılmıştır.

Docker Engine Linux üzerinde aşağıdaki şekilde namespces’leri kullanır.

The pid namespace: Process isolation (PID: Process ID).
The net namespace: Managing network interfaces (NET: Networking).
The ipc namespace: Managing access to IPC resources (IPC: InterProcess Communication).
The mnt namespace: Managing filesystem mount points (MNT: Mount).
The uts namespace: Isolating kernel and version identifiers. (UTS: Unix Timesharing System).

Son.

Güzelliklerle kalın.

Samet.