Güncelleme tarihi: 26 Nis 2022
Docker ; en net tanımlamayla open source bir ‘container’ teknolojisidir. Docker, aynı işletim sistemi üzerinde, birbirinden izole ve bağımsız containerlar sayesinde sanallaştırma sağlayan bir teknolojidir ve aynı zamanda Docker, uygulamalarınızı hızla derlemenizi, test etmenizi ve dağıtmanızı sağlayan bir yazılım platformudur. Docker, kitaplıkları, sistem araçları, kod ve çalışma zamanı dahil olmak üzere yazılımların çalışması için gerekli her şeyi içeren container adlı standartlaştırılmış birimler halinde paketler. Docker'ı kullanarak her ortama hızla uygulama dağıtıp uygulamaları ölçeklendirebilir ve hazırlamış olduğunuz yazılım kodunun nitelikli çalışacağına garanti sağlar diyebilmekteyiz.
Esas olarak, farklı ortamlarda verimli bir şekilde çalışan dağıtılmış uygulamalar geliştirmek için bir yazılım geliştirme platformu olarak kullanılır. Yazılım sistemini bilinmezlikten kurtardığı için geliştiricilerin uyumluluk sorunları hakkında endişelenmesine gerek kalmaz. Uygulamaları yalıtılmış ortamlara (kapsayıcılara) paketlemek; uygulamaları geliştirmeyi, dağıtmayı, bakımını yapmayı ve kullanmayı da kolaylaştırır.
Docker, uygulamaları depolamak, kapsayıcı oluşturmak için sanallaştırmayı kullandığından, konsept sanal makinelere benzer görünebilir.
DOCKER NE İÇİN KULLANILIR ?
1.Daha az kaynakta birden çok iş yükü çalıştırma.
2.Yalıtım ve ayırma uygulamaları.
3.Geliştirme ve yayın döngüleri arasında tutarlılığı sağlamak için ortamları standart hale getirmek.
4.Geliştirme yaşam döngüsünü kolaylaştırma ve CI/CD iş akışlarını destekleme.
5.Çoklu bulut platformlarında çalışabilen son derece taşınabilir iş yükleri geliştirmek.
DOCKER’IN TEMEL BİLEŞENLERİ NELERDİR ?
1. DOCKER ENGİNE
Docker Engine (DE), ana makineye kurulur ve Docker sisteminin çekirdeğini temsil etmektedir. Bir çalışma zamanı sistemi, kapsayıcıları oluşturan ve yöneten temeldeki istemci-sunucu teknolojisidir.
Docker Engine üç bileşenden oluşur:
Sunucu: Kapsayıcıların oluşturulmasından ve yönetilmesinden sorumlu olan programdır.
Rest API: Oluşturulan programlar ve Docker arasında iletişim kurup, Docker’a ne yapması gerektiğini iletir.
Komut Satırı Arabirimi (CLI): Docker komutlarını çalıştırmak için kullanılır.
2. DOCKER IMAGES
Docker görüntüleri, kapsayıcı oluşturmak için kullanılan şablonlardır. Kaynak kodu, kitaplıkları, bağımlılıkları, araçları ve bir uygulamayı çalıştırmak için gerekli diğer dosyalardan oluşan salt okunur dosyalardır. Her görüntü, belirli bir Docker görüntüsü oluşturmak için özel yönergeler içeren bir Docker dosyasından oluşturulur.
Docker, derlemelerini hızlandırmanın yanı sıra, görüntülerin yeniden kullanılabilirliğini artırmak ve disk kullanımını azaltmak için de kullanışlıdır.
Kapsayıcılarınızı hafif ve hızlı tutmak amaçlı küçük görüntüleri korumak önemlidir.
3. DOCKERFİLE
Docker görüntüsünün nasıl oluşturulacağına ilişkin bir dizi talimattan oluşan bir komut dosyasıdır. Bu yönergeler, işletim sistemini, dilleri, ortam değişkenlerini, dosya konumlarını, ağ bağlantı noktalarını ve görüntüyü çalıştırmak için gereken diğer bileşenleri belirtmeyi içerir. Dosyadaki tüm komutlar otomatik olarak gruplanır ve yürütülür.
Bir görüntünün birden çok katmanı vardır. Kapsayıcı oluşturmak için bir Docker görüntüsü çalıştırdığınızda, yeni bir okuma-yazma katmanı eklenir. Bu bazen konteyner katmanı olarak adlandırılır. Ek katman, gelecekte kullanmak üzere yeni bir Docker görüntüsü oluşturmayı taahhüt edebileceğiniz temel görüntüde değişiklik yapmanıza olanak tanır.
4. DOCKER HUB
Docker tarafından sağlanan en büyük bulut tabanlı konteyner görüntüleri deposudur. Açık kaynaklı projeler, yazılım satıcıları ve Docker topluluğu tarafından oluşturulan 100.000’den fazla görüntüyü kullanıma sunar.
Platform, uygulamalarınızı herhangi bir yere hızlı bir şekilde göndermenize, ekip arkadaşlarınızla işbirliği yapmanıza ve bir geliştirme hattına daha hızlı entegrasyon için derlemeleri otomatikleştirmenize olanak tanır.
GitHub gibi, geliştiriciler konteyner görüntülerini Docker Hub’dan alır.
5. DOCKER VOLUMES
Bu yardımcı bir araçtır, kullanıcıların verileri kaydetmesine, kapsayıcılar arasında paylaşmasına ve yenilerine bağlamasına olanak tanır. Docker volumes, ana bilgisayarda depolandığı için kapsayıcının yaşam döngüsünden bağımsızdır.
6. DOCKER COMPOSE
Aynı anda birden fazla kapsayıcıyı çalıştırırken ve yönetirken süreci basitleştirmek için tasarlanmış kullanışlı bir araçtır. Birlikte çalışmak için gereken birden çok kapsayıcıyı dizer ve bunları tek bir koordineli komutla kontrol eder.
Docker Compose, bir komutla kapsayıcıları başlatmak, yürütmek, iletişim kurmak ve kapatmak için kullanılır. Bu, uygulamanın hizmetlerini yapılandıran bir YAML dosyası kullanılarak yapılır.
7. DOCKER DESKTOP
Eskiden Windows için Docker ayrı, Mac için Docker ayrı konfigüre edilirken, birkaç dakika içinde Windows ve Mac’te kapsayıcıları oluşturmaya ve çalıştırmaya başlamanızı sağlayan bir uygulamadır. Tüm Docker geliştirme ortamını kurmanın basit bir yoludur. Docker Engine, Docker Compose, Docker CLI istemcisi, Docker Content Trust,
Kubernetes ve Credential Helper’ı içerir.
Araç, herhangi bir bulut platformunda birden çok dilde framework’le kapsayıcılı uygulamalar, mikro hizmetler oluşturmak ve paylaşmak için kullanılır.
CONTAINER NEDİR?
Docker Daemon tarafından Linux çekirdeği içerisinde birbirinden izole olarak çalıştırılan process’lerin her birine verilen isimdir. Virtual Machine (Sanal Makina) teknolojosinde Docker’ı Hypervisor’e benzetirsek fiziksel sunucu üzerinde halihazırda koşturulmakta olan her bir işletim sisteminin (sanal sunucunun) Docker’daki karşılığı Container’dır.
CONTAINERIZATION (Konteynerleştirme) Nedir?
Containerization, bir sunucu üzerindeki işletim sisteminin diğer container’lar tarafından paylaşılması demektir. Birbirinden farklı uygulamalar, dağıtımlar ve envrionment’ları birbirinden izole şekilde çalıştırır.
IMAGE NEDİR ?
Containerlar layer halindeki Image’lardan oluşur. Docker Image ise containerlara kurulacak ve çalıştırılacak olan uygulamaların veya OS’lerin image dosyalarıdır.
Docker Offical Image’lerinin bulunduğu kütüphaneye bu adresten ulaşabilirsiniz
DOCKER’IN AVANTAJLARI NELERDİR?
1. Tutarlılık
Docker, uygulamanızın birden çok ortamda aynı şekilde çalışmasını sağladığından dolayı farklı makinelerde ve işletim sistemlerinde çalışan geliştiriciler (macOS, Linux, Win), aynı uygulama üzerinde ortam sorunları olmadan birlikte çalışabilirler.
2. Otomasyon
Platform, manuel müdahale olmadan sıkıcı, tekrarlayan görevleri otomatikleştirmenize ve işleri zamanlamanıza olanak tanır.
3. Daha hızlı dağıtımlar
Kapsayıcılar işletim sistemini sanallaştırdığından, kapsayıcı örnekleri başlatılırken önyükleme süresi yoktur. Bu nedenle, dağıtımları birkaç saniye içinde yapabilirsiniz. Ayrıca, yeni uygulamalar oluşturmak için mevcut kapsayıcıları da paylaşabilirsiniz.
4. CI/CD desteği
Docker, dağıtımları hızlandırdığı, güncellemeleri basitleştirdiği ve ekip arkadaşlarının birlikte verimli çalışmasına izin verdiği için CI/CD uygulamalarıyla iyi çalışır.
5. Geri almalar ve görüntü sürüm kontrolü
Bir kapsayıcı, her biri tabandaki değişiklikleri ve güncellemeleri temsil eden birden çok katmana sahip olabilen bir Docker görüntüsüne dayanır. Bu özellik yalnızca derleme sürecini hızlandırmakla kalmaz, aynı zamanda kapsayıcı üzerinde sürüm kontrolü sağlar. Bu, ihtiyaç duyulduğunda geliştiricilerin kullanılan bir önceki sürüme geri dönebilmelerini sağlar.
6. Hızlı Başlatım
Docker saniyeler içerisinde başlar çünkü içerisinde barındırdığı her bir container sadece birer processtir. Böylece karşımıza lightweight bir yapı karşımıza çıkar. Bu da bizi sanal makinelerin hantallığından kurtarmış olmaktadır.
7. Daha hızlı deployment süreci
Dockerı kullanmak için yeni bir environment kurmaya gerek yoktur. Farklı sunucularda çalışmak isteyen developerlar, sadece docker imageleri indirip o sunucuda imageleri çalıştırmaları yeterlidir.
8. Daha Kolay Yönetim ve Ölçeklendirme
Bir sanal makineye göre , docker üzerindeki containerleri çok daha kolay bir şekilde çalıştırabiliriz veya istediğimiz zaman yok edebiliriz. Containerleri manage etmek için farklı toollar mevcuttur. Orchestrator diye nitelendirdiğimiz Kubernetes teknolojisi daha popüler olarak kullanılıyor. Kubernetes, kısaca container kullanan uygulamaların dağıtımını, ölçeklendirmesini ve yönetilmesini otomatik hale getiren açık kaynak kodlu bir sistemdir.
9. Daha İyi Kaynak Kullanımı
Sanal makinelere göre tek bir sunucu üzerindeki kaynak tüketimi docker’da çok daha verimlidir. Bu sebeple daha az kaynak tüketimi ile daha fazla containeri çalıştırabiliriz.
10. Farklı İşletim Sistemlerine Destek Vermesi
Docker ; Windows, Linux, MacOs gibi bir çok farklı işletim sistemlerine destek sunmaktadır.
11. Popüler Cloud Servislerle Entegre Edilebilir
Docker , AWS, Microsoft Azure, Ansible, Kubernetes, Istio ve daha fazla tool ve cloud hizmetlerle entegre şekilde çalışabilir.
Okuduğunuz ve zaman ayırdığınız için teşekkür ederim.