1. Anasayfa
  2. »
  3. Genel
  4. »
  5. Docker Nedir? Neden Docker Kullanmalısınız?

Docker Nedir? Neden Docker Kullanmalısınız?

Verimin Verimin -
9 0
docker

Docker Nedir?

Docker, uygulamaların geliştirilmesi, dağıtılması ve çalıştırılmasını kolaylaştıran açık kaynaklı bir platformdur. Bu yapı, yazılım çözümlerini altyapıdan bağımsız hale getirerek daha hızlı teslimat imkânı sağlar. Docker sayesinde altyapınızı, uygulamalarınızı yönettiğiniz sistematik biçimde kontrol edebilirsiniz. Yazılım geliştirme sürecindeki kod gönderme, test etme ve yayına alma aşamalarında Docker’ın sunduğu yöntemler sayesinde, geliştirme ile üretim ortamı arasındaki zaman farkı ciddi şekilde azaltılabilir. Peki, docker nedir ne işe yarar? gelin daha yakından inceleyelim.

Docker Nasıl Çalışır? Konteyner Mimarisine Giriş

Docker, istemci ve sunucudan oluşan bir yapı kullanır. Docker istemcisi, kapsayıcıların oluşturulması, çalıştırılması ve dağıtımı için görev yapan Docker daemon ile haberleşir. Bu istemci, aynı sistemdeki daemon ile çalışabileceği gibi, uzaktaki bir Docker daemon’una da bağlanabilir. UNIX soketi veya bir ağ bağlantısı üzerinden erişilebilen REST API aracılığıyla bu iki birim arasında iletişim sağlanır.

Konteyner teknolojisi, aslında bir tür sanallaştırma yaklaşımıdır; ancak burada hypervisor yerine doğrudan işletim sistemi üzerinde bir konteyner motoru yer alır. Aynı işletim sisteminde birden fazla uygulama veya hizmetin izole şekilde çalıştırılmasını mümkün kılar.

Her ne kadar günümüzde en çok tercih edilen konteyner mimarisi Docker olsa da, bu yapının temelleri 2008 yılında yayımlanan Linux Containers (LXC) teknolojisine dayanır. Yani LXC, hypervisor bazlı sanallaştırma çözümleri kadar köklü bir geçmişe sahiptir. Docker, LXC’nin karmaşık işlemlerini otomatik hale getirerek kullanım kolaylığı sunmuş ve hızla yaygınlaşmıştır.

Yukarıda sıralanan tüm bilgiler docker ne işe yarar? sorusuna kapsamlı bir cevap niteliğindedir.

Docker Bileşenleri: Image, Container, Dockerfile, Registry

Docker, konteyner teknolojisine dayalı sanallaştırma altyapısı sunar ve bu yapıyı oluşturan çeşitli temel bileşenlerden oluşur. Her bir bileşen, kapsayıcıların inşa edilmesi, çalıştırılması ve yönetilmesi sürecinde kendine özgü roller üstlenir. Türkiye’nin önde gelen hosting sağlayıcılarından biri olan Verimin.com.tr olarak bu bölümde Docker bileşenlerini detaylı şekilde ele almaktayız.

İlk olarak, Docker Image, bir kapsayıcının çalıştırılması için gerekli yapılandırmaları barındıran, katmanlardan oluşan bir dosya bütünüdür. Bu imajlar, çalıştırılacak uygulamanın ihtiyaç duyduğu bileşenleri içeren çalıştırılabilir paketlerdir. Image, kapsayıcının nasıl oluşturulacağı, hangi bileşenlerin çalışacağı ve hangi sırayla çalıştırılacağı gibi bilgileri içerir.

Docker Container, bir imajın çalıştırılmış ve izole şekilde çalışan halidir. Uygulama ile birlikte ihtiyaç duyulan tüm bağımlılıkları bir arada sunan bu yapı, yazılımların farklı sistemlerde tutarlı biçimde çalıştırılmasına olanak tanır. Örneğin, Ubuntu işletim sistemi üzerinde çalışan bir NGINX sunucusu içeren bir Docker image’ı, “docker run” komutu ile aktif hale getirildiğinde, çalışır durumda bir konteyner oluşturulmuş olur ve NGINX bu ortamda hizmet verir.

Dockerfile, bir Docker imajı oluşturmak için gereken yönergeleri barındıran metin tabanlı bir betik dosyasıdır. Bu dosyada, hangi taban imajın kullanılacağı, hangi dosyaların ekleneceği, çalıştırılacak komutlar ve ayarlanacak ortam değişkenleri gibi talimatlar yer alır. Her satır bir katman oluşturur ve bu yapı sayesinde docker build komutu ile imaj üretimi sağlanabilir. Dockerfile kullanımı, yazılım ortamlarının otomatik, tekrarlanabilir ve sürdürülebilir şekilde oluşturulmasına katkı sunar.

Peki, docker compose nedir? Docker Compose, birden fazla container içeren uygulamaları tek tek komutlarla yönetmek yerine, tüm servis tanımlarını içeren tek bir YAML yapılandırma dosyası aracılığıyla container’ları ve imajları otomatik olarak oluşturup çalıştırmayı sağlayan pratik bir araçtır.

Son olarak, Docker Registry, imajların depolandığı ve farklı sistemlere dağıtıldığı yüksek performanslı, durumsuz bir sunucu uygulamasıdır. Kendi sunucunuzda yerel veya özel bir registry kullanarak imajları barındırabilir, erişimi sınırlandırabilir ve internet bant genişliği kullanımınızı azaltabilirsiniz.

Docker Ne İçin Kullanılır?

Docker, geliştiricilere uygulama ve hizmetlerini yerel konteynerler aracılığıyla standart hâle getirilmiş ortamlarda çalıştırma olanağı vererek yazılım yaşam döngüsünü önemli ölçüde sadeleştirir. Konteyner tabanlı bu mimari, Sürekli Entegrasyon / Sürekli Teslimat (CI/CD) süreçleri için son derece elverişlidir.

Docker’in çalışma prensibini aşağıdaki açıklamalarla daha detaylı bir şekilde ele alabiliriz:

  • Takımdaki yazılımcılar kodlarını kendi makinelerinde üretir ve oluşturdukları Docker konteynerlerini ekip arkadaşlarıyla kolayca paylaşır.
  • İlgili uygulamalar, hem otomatik hem de manuel testlerin yürütüldüğü bir sınama sahnesine Docker sayesinde aktarılır.
  • Hata saptandığında geliştirici, problemi kendi geliştirme ortamında giderir ve doğrulama için güncellenmiş konteyneri test katmanına yeniden yollar.
  • Testler başarıyla sonuçlandığında, düzeltmenin müşteriye ulaşması, yalnızca güncellenmiş imajı üretim ortamına göndermek kadar zahmetsizdir.

Docker Kullanmanın Avantajları Nelerdir?

Docker kullanmanın başlıca avantajları aşağıdaki şekilde sıralanmaktadır:

Taşınabilirlik

Docker’ın çarpıcı yönlerinden biri, konteynerlerin uygulama ile tüm bağımlılıklarını tek bir paket içinde sunmasıdır. Böylece yerel dizüstü bilgisayarınızda, şirket içi sunucuda ya da bulut altyapısında olmanız fark etmeksizin aynı görüntü aynı biçimde çalışır; tüm aşamalarda ortam tutarlılığı korunur.

Yalıtım

Her konteyner, içinde barındırdığı süreçleri diğer kapsayıcılardan bağımsız olarak yürütür. Bu yüksek izolasyon seviyesi, aynı fiziksel makine üzerinde çalışan uygulamaların birbirini etkilemesini önler ve güvenliği artırırken çakışmaların da önüne geçer.

Kaynak Verimliliği

Geleneksel sanal makineler tüm işletim sistemini kopyalarken, Docker konteynerleri ortak bir çekirdek kullanır. Bu sayede daha hafif, az RAM ve disk alanı gerektirir; aynı donanım üzerinde daha fazla hizmetin barındırılmasına olanak tanır ve altyapı maliyetlerini düşürür.

Ölçeklenebilirlik

Docker, yük arttığında tek bir kapsayıcıyı çoğaltmaya ve Kubernetes ya da Docker Swarm gibi orkestrasyon araçlarıyla trafiği dengeli biçimde dağıtmaya imkân verir. Böylece talebe bağlı olarak kapasiteyi hızla artırıp azaltmak mümkün olur; bu durum yoğun istek alan sistemler için hayati önem taşır.

Daha Hızlı Geliştirme ve Dağıtım

Konteynerler sayesinde geliştiriciler, üretim ortamıyla birebir aynı konfigürasyona sahip yerel alanlarda çalışabilir ve oluşabilecek uyumluluk sorunları büyük ölçüde ortadan kalkar. Ayrıca dağıtım süreçleri otomatikleştirildiği için teslimat döngüsü kısalır, hatalar azalır ve piyasaya sürüm süresi ciddi biçimde hızlanır.

Kubernetes Nedir?

Kubernetes, adını Yunanca “dümenci” veya “rehber” anlamına gelen kelimeden alır. Teknoloji dünyasında sıkça k8s kısaltmasıyla karşılaşılır; bu kısaltma, baştaki “k” ve sondaki “s” harfleri arasında yer alan sekiz harfin özetlenmesinden oluşur.

Kubernetes, Google tarafından Go programlama dili kullanılarak geliştirilmiş ve şu an Cloud Native Computing Foundation (CNCF) tarafından sürdürülen bir açık kaynak konteyner orkestrasyon platformudur. Bu sistem, mevcut container tabanlı uygulamalarınızı otomatik olarak dağıtmanıza, istenilen ölçüde artırıp azaltmanıza ve bunları sistemli biçimde yönetmenize imkân tanır. 2014 yılında ilk kez duyurulan bu proje, bugün itibarıyla en son 1.22 sürümüne sahiptir.

Docker vs. Kubernetes İle Arasındaki Farklar?

Docker ve Kubernetes her ikisi de açık kaynaklı container çözümleri sunar. Ancak, temel görevleri ve uygulama dağıtımındaki rolleri açısından ciddi farklılıklar barındırırlar.

Docker, daha çok container imajlarının oluşturulması ve çalıştırılması aşamasında tercih edilirken, Kubernetes büyük ölçekli sistemlerde bu container’ların organizasyonu ve yönetiminde devreye girer. Modern yazılım mimarilerinde her mikro hizmet çoğunlukla birkaç container’dan oluşur ve bu yapı Kubernetes tarafından organize edilir.

Operasyonel Kullanım

Docker, geliştiricilere aşağıdaki araçlarla container’lı uygulama yönetimi sağlar:

  • docker build: Yeni imajlar oluşturur.
  • docker compose: Çoklu container’lı servisleri tanımlar ve çalıştırır.
  • docker hub: İmaj paylaşımı ve dağıtımı için merkezi bir platform sunar.

Kubernetes ise container’ları küme üzerindeki kaynaklara göre dağıtır. Uygulamalar, pod adı verilen mantıksal birimlerde gruplanarak çalıştırılır. Her pod bir veya birden fazla container barındırabilir. Yük artışına göre Kubernetes, otomatik şekilde yeni pod’lar devreye alabilir.

Temel Mimariler

Docker Engine, uygulama geliştiricilerin uygulamalarını imaj haline getirmelerini sağlayan temel altyapıdır ve belirli API’ler aracılığıyla dış sistemlerle haberleşir. Kubernetes’in kontrol düzlemi (control plane) ise, hangi pod’un ne zaman çalışacağına karar verir, trafik yönetimini sağlar ve sistem kaynaklarına göre dinamik ölçeklendirme yapar.

Güçlü Yönleri

Docker, standartlaştırılmış bir geliştirme ortamı sunarak uygulamaların kolay taşınmasını ve her platformda aynı biçimde çalışmasını sağlar. Kubernetes ise, özellikle karmaşık mikro hizmet mimarilerine sahip uygulamaların büyük çaplı ortamlarda kesintisiz ve ölçeklenebilir şekilde çalıştırılmasını mümkün kılar.

Docker’ı Kullanmak için En İyi Uygulamalar ve İpuçları

Docker ile çalışırken, sistem verimliliğini ve güvenliğini artırmak adına çeşitli uygulama kurallarını benimsemek kritik önem taşır.

Başlangıç olarak, kullanılan imajların güvenilir ve resmi kaynaklardan seçilmesi gerekir. Küçük boyutlu ve sık güncellenen imajlar hem güvenlik tehditlerini azaltır hem de performansı artırır.

Dockerfile yazarken yalınlık esastır. Gereksiz katmanlar oluşturmaktan kaçınılmalı, RUN komutları tek bir satıra birleştirilmeli ve yalnızca ihtiyaç duyulan bağımlılıklar sisteme dahil edilmelidir. Bu sayede build süresi kısalır ve imaj boyutu optimize edilir.

Güvenlik için, konteynerlerin root kullanıcısı ile değil, sınırlı yetkilere sahip kullanıcılarla çalıştırılması önerilir. Ağ ayarları özenle yapılandırılmalı, sadece ihtiyaç duyulan portlar açılmalı ve güvenlik duvarı politikaları uygulanmalıdır. Ayrıca sistem, düzenli olarak güncellenmeli ve güvenlik taramalarına tabi tutulmalıdır.

Kaynakların daha verimli kullanılması için, her konteynerin CPU, RAM ve disk kullanımı belirli sınırlar içinde tutulmalıdır. Ayrıca, loglama ve monitoring araçları yardımıyla performans izlenmeli, kullanılmayan veya gereksiz çalışan konteynerler sistemden temizlenmelidir.

Docker, CI/CD süreçleriyle entegre çalışabildiğinden, uygulama imajlarının oluşturulması, test edilmesi ve yayınlanması otomatikleştirilebilir. Bu da geliştirme süreçlerini hızlandırır ve hataları azaltır. Versiyon kontrolü sayesinde farklı sürümler kolayca izlenebilir.

Son olarak, konteynerlerin çalışacağı barındırma altyapısı dikkatle seçilmelidir. Erişilebilirlik, güvenlik, teknik destek gibi faktörler göz önünde bulundurularak Verimin gibi güvenilir sağlayıcılar tercih edilebilir.

 

İlgili Yazılar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir