Docker Nedir ?

Anil Ozturk
Devops Türkiye☁️ 🐧 🐳 ☸️
4 min readMay 15, 2018
Do one thing and do it well !!

Slogan, Container teknolojisinin ve mikro servislerin çalışma mantığıdır. Yani her bir container sadece tek bir iş yapar ve misyonunu tamamlar.

Docker; geliştirilen uygulamaların platform bağımsız bir şekilde koşturabilmenize yarayan bir “container” teknolojisidir.

Dünyada en çok kullanılan “Container” platformu Docker’dır. Linux Containers (LXC) üzerine kurulu bir teknolojidir. Linux Containers , Linux’da aynı işletim sistemi içerisinde birbirinden izole olmuş bir biçimde çalışan Container’lar (Linux tabanlı sistemler) sağlamaktadır.

Burdan çıkarım ile Linux Containers, işletim sistemi seviyesinde bir sanallaştırma altyapısı sunmaktadır. Docker web sitesinden aldığım aşağıdaki görseller durumu biraz daha anlaşılır kılıyor.

Hypervisor vs Docker

Görselden hareketile aynı işletim sistemi içerisinde çalıştığını gördüğümüz Container’lar birbirlerinden izole edilmişlerdir ve birbirleri ile müdahale etmediğimiz müddetçe iletişime geçemezler. Containerlar arası iletişim kısıtlamasının bir amacı da Container’larının güvenliğini aynı Host üzerindeki diğer Container’lara karşı da korumaktır.

Container teknolojisi ile Hypervisor teknolojisine göre sanallaştırma için gerekli disk alanından tasarruf sağlanmaktadır aynı zamanda Hyporvisor’lerle yapılan sanallaştırma her bir işletim sisteminin yani Vmlerin ayrı ayrı güncellemelerin ve güvenlik yamalarının yapılması gerekmektedir, container ile bu güncellemelerden de operasyonel tasarruf sağlanmış oluyor.

Gerçek hayattaki senaryolarını şu şekilde örnekleyebiliriz; ayrı ayrı Container’lar içinde çalıştırılan bileşenler (app server, web server gibi) gerektiği durumlarda teker teker genişletilebilir. Örneğin web server’ın istekleri karşılamada yetersiz olduğu görülürse web server Container’ından bir veya daha fazla ekstra Container yaratılarak gerekli işlem gücü diğer bileşenlerden (app server ve db server) bağımsız olarak sağlanmış olur.

Eğer bu üç bileşeni aynı Container’a koysaydık ek web server isteğinde bu üç bileşeni birden içeren yeni bir Container’ı ayağa kaldırıp burada sadece web server’ın çalışması için gerekli konfigürasyon ve kod değişikliğinin yapılması gerekecekti.

Docker Mimarisi, Windows Kurulumu ve Terminolojisi

Windows ve macOS deki mimarisi aşağıdaki şekildedir, terminolojisindeki bileşenlerin kısa açıklamalarını görselin aşağısında bulabilirsiniz.

Kurulum noktasında aşina olduğum için Powershell üzerinden kurulumundan bahsedip birkaç başlangıç örneği yapacağım.

Docker Architecture

Container :Docker Daemon tarafından Linux çekirdeği içerisinde birbirinden izole olarak çalıştırılan process’lerin her birine verilen isimdir.Container’lar milisaniyeler içerisinde başlatılabilir, istenen herhangi bir anda duraklatılabilir, tamamen durdurulabilir ve yeniden başlatılabilirler.

Image :Conteinerlara kuracağımız uygulama yada OS lerin image larıdır.

Docker Daemon :Hypervisor’ün dockerdaki karşılığıdır. Bütün CPU ve RAM vb gibi işletim sistemine ait işlerin yapıldığı bölümdür.

Docker CLI :Kullanıcının Docker Daemon ile anlaşabilmesini sağlayan komut arayüzüdür.

Docker Registery :Container’lar Image’lardan oluşturulur. Image’larsa ortak bir çalışma sonucu olarak meydana gelir ve Docker Registery’lerde tutulur.

Docker Repository :Image’ın oluşturduğu yapıdır. Bir repository’deki değişik Image’lar tag lanarak etiketlenir böylece değişik versiyonlar yönetilebilir.

Powershell ile Kurulum :

1. Windows PowerShell’i yönetici (Administrator) yetkisi ile açıyoruz.

2. Sırayla aşağıdaki 2 komutu çalıştırıyoruz.

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force #Powerhell modülünün yüklenmesi

Install-Package -Name docker -ProviderName DockerMsftProvider #Docker paketinin yüklenmesi

3. Modül ve Paket Kurulumlarının ardından sunucuyu yeniden başlatıyoruz.

4. docker info komutu ile kurulum sonrası özet bilgileri görebiliriz.

5. docker images komutu ile local repositorymizde yer alan imageları görebiliriz.

6. docker run “image name” ile ismi yazılan image çalıştırılır.

7. ps -a komutu ile çalıştırılan koşan ve çıkış yapan Container’ları görmek için kullanıyoruz, bendeki çıktısı aşağıdaki gibi,

31c2d49f04df ID ile fervent_cori adında hello komutunu çalıştıran bir Container 2 dakika önce koşturulmuş ve 2 dakika önce çıkış yapmış. Yukarıdaki metinlerde daha önce belirttiğim gibi bu çıkış yapan containeri istediğimiz zaman tekrarda çalıştırabiliriz.

Faydalı olması dileğim ile…

--

--