Docker Nedir

Docker, kapsayıcılara dayalı uygulamalar oluşturmak için işletim sistemi çekirdeğini kullanan, birbirinden ayrı olarak çalışan küçük ve hafif yürütme ortamları olan bir yazılım platformudur.  Docker, geliştiricilerin uygulama geliştirmeyi, test etmeyi ve devreye almayı basitleştiren hafif ve taşınabilir yazılım kapsayıcıları oluşturmasına yardımcı olur.

Docker tarihi incelendiğinde, 2008 yılında Paris’te Solomon Hykes tarafından DotCloud adıyla kurulan şirket ile temellerinin atıldığı görülür. İlk çıktığında sadece Linux işletim sistemini destekleyen Docker, artık Windows ve MacOS tabanlı işletim sistemlerinde de çalışmaktadır.  Microsoft, IBM ve Red Hat gibi yüksek profilli teknoloji sağlayıcılarının yanında hızla yükselen bu platform, birçok geliştiricinin hızla ilgisini çekti. Bir sunucudan diğerine, dizüstü bilgisayarınızdan EC2’ye teslim edebileceğiniz bağımsız yazılım birimidir. Bu sistemin bu şekilde çalışmasına olanak veren süreç düzeyinde izole edilmiş, kendi dosya sistemine sahip olmasıdır. Özetle Docker, “konteyner” adı verilen yazılım paketlerini çalıştırmak için kullanılan, DockerFile ve Docket Image adı verilen bileşenlere sahip, işletim sistemi seviyesinde sanallaştırma imkanu sunan bir programdır.

Docker, süreçleri basitleştirerek,  fiili bir endüstri standardına hızla yaklaştı. Docker, iş yüklerini izin verilen önceki yöntemlerden daha taşınabilir ve esnek hale getirmek için bir dizi yeniden kullanılabilir görüntü kullanarak geliştiricilerin bir iş yükünü tek bir akıcı şekilde dağıtmasına, çoğaltmasına, taşımasına ve yedeklemesine olanak tanır.

Sanal makine (VM) dünyasında, aynı donanım üzerinde çalışırken uygulamaları ayrı tutarak yapılabilir, ancak bu dünyada her VM’nin kendi işletim sistemine ihtiyacı vardır. Bunlar genellikle büyüktür, başlatılması yavaştır, taşınması zordur. Bakımı ve yükseltmesi uzun zaman alır. Konteynerlerin VM döneminden tanımlı bir değişime işaret ettiği yer, temel işletim sistemi çekirdeğini paylaşırken yürütme ortamlarını yalıtmak ve geliştiriciler için hafif ve hızlı bir seçenek sunmaktı.

Docker Nasıl Çalışır?

Docker teknolojisi, süreçleri bağımsız olarak yönetebilmek ve ayırmak için Linur, Cgroups ve namescapes gibi çekirdeğin özelliğini kullanır. Bu bağımsızlık sayesinde, farklı işletim sistemlerinde olunsa bile güvenlik korunurken, birden çok işlem ve uygulama birbirinden ayrı şekilde çalıştırılabilir.

Docker, görüntü tabanlı bir dağıtım modeli sağlar. Bu model, bir uygulamayı veya hizmet kümesini birden çok ortamda tüm bağımlılıklarıyla paylaşmayı kolay bir hale getirir. Docker, uygulamanın (veya bir uygulamayı oluşturan birleşik işlem kümelerinin), kapsayıcı ortamı içinde dağıtılmasını da otomatikleştirir.

docker Sanallaştırma ve kapsayıcı altyapısı

Sanallaştırma ve kapsayıcı altyapısı yığınlarının nasıl biriktiğini gösteren görsel

Docker’ı kullanıcı dostu ve benzersiz kılan şey, kullanıcılara uygulamalara benzeri görülmemiş bir erişim, hızlı bir şekilde dağıtma yeteneği ve sürümler üzerinde kontrol sağlamasıdır.

Docker Bileşen Parçaları

Docker, bir kapsayıcıyı oluşturmak ve başlatmak için gereken araçları daha önce mümkün olandan daha akıcı ve basitleştirilmiş bir şekilde paketlemenin yeni bir yolunu bulduğu için yazılım geliştiricilerle yola çıktı. Bileşen parçalarına ayrılan Docker, Dockerfile, kapsayıcı görüntüleri, Docker çalıştırma yardımcı programı, Docker Hub, Docker Engine, Docker Compose ve Docker Desktop’tan oluşur.

  • Docker Dosyası (Dockerfile): Her Docker kapsayıcısı bir Dockerfile ile başlar. Bu metin dosyası, işletim sistemi, diller, çevresel değişkenler, dosya konumları, ağ bağlantı noktaları ve çalıştırması gereken diğer bileşenler dahil olmak üzere bir Docker görüntüsü oluşturmak için bir dizi talimat sağlar.
  • Docker Görüntüsü (Docker image): VM dünyasındaki anlık görüntüye benzer şekilde, Docker görüntüsü, bir kapsayıcı oluşturma talimatlarını ve kapsayıcının hangi yazılım bileşenlerinin nasıl çalıştırılacağına ilişkin belirtimleri içeren taşınabilir, salt okunur, yürütülebilir bir dosyadır.
  • Docker Çalıştırma Yardımcı Programı (Docker Run Utility): Docker’ın çalıştırma yardımcı programı, bir kapsayıcıyı başlatan komuttur. Her kap, bir görüntünün bir örneğidir ve aynı görüntünün birden çok örneği aynı anda çalıştırılabilir.
  • Docker Merkezi (Docker Hub): Kapsayıcı görüntülerinin depolanabileceği, paylaşılabileceği ve yönetilebileceği bir depodur. Bunu Docker’ın kendi GitHub sürümü olarak düşünün, ancak özellikle kapsayıcılar için.
  • Docker Motoru (Docker Engine): Docker’ın çekirdeğidir. Kapsayıcıları oluşturan ve çalıştıran temel istemci-sunucu teknolojisidir. Docker Engine, kapsayıcıları yönetmek için dockerd adlı uzun süredir devam eden bir arka plan programı süreci, programların Docker arka plan programı ile iletişim kurmasına olanak tanıyan API’ler ve bir komut satırı arabirimi içerir.
  • Docker Oluşturucu (Docker Compose): Çok konteynerlı Docker uygulamalarını tanımlamak ve çalıştırmak için YAML dosyalarını kullanan bir komut satırı aracıdır. Tüm hizmetleri oluşturma, başlatma, durdurma, yeniden oluşturma, çalışan tüm hizmetlerin durumunu ve günlük çıktısını görüntülemesini sağlar.
  • Docker Masaüstü (Docker Desktop): Tüm bu bileşen parçaları Docker’ın Masaüstü uygulamasına sarılarak kapsayıcılı uygulamalar ve mikro hizmetler oluşturmak ve paylaşmak için kullanıcı dostu bir yol sağlar.

Docker Avantajları

Docker konteynerleri, daha önce izin verilen yöntemlerden daha kolay bir araya getirilmesi, bakımı ve taşınması daha kolay uygulamalar oluşturmak için bir yol sağlar. Bu, yazılım geliştiricilere çeşitli avantajlar sağlar. Docker avantajları şunlardır:

  • Modülerlik

Docker’ın konteynerleştirme kavramının temelleri, uygulamanın tamamını kaldırmak zorunda kalmadan güncellemek veya onarmak için uygulamanın bir bölümünü kaldırma yeteneğine üzerine kurulmuştur. Bu mikro hizmet tabanlı yaklaşıma ek olarak, işlemleri hizmet odaklı mimarinin (SOA) yaptığı gibi birden çok uygulama arasında paylaşabilirsiniz.

  • Katmanlar ve Görüntü Sürüm Kontrolü

Her bir Docker görüntü dosyası, tek bir görüntüde birleşen bir dizi katmandan meydana gelir. Görüntü değiştiğinde bir katman oluşturulur. Bir kullanıcı run veya copy gibi bir komut belirttiğinde, yeni bir katman oluşturulur.

Docker, oluşturma sürecini hızlandıran yeni kapsayıcılar oluşturmak için bu katmanları yeniden kullanır. Ara değişiklikler resimler arasında paylaşılarak hızı, boyutu ve verimliliği daha da artırır. Katmanlamanın doğasında da sürüm kontrolü vardır: Her yeni değişiklik olduğunda, esasen yerleşik bir değişiklik günlüğünüz olur ve size kapsayıcı görüntüleriniz üzerinde tam kontrol sağlar.

  • Geri Alma

Her görüntünün katmanları vardır. Katmanlamanın en büyük avantajı, geri dönme yeteneğidir. Bir görüntünün mevcut yinelemesini beğenmediğinizde, kolaylıkla önceki sürüme döndürebilirsiniz. Bu, çevik bir geliştirme yaklaşımını destekler ve araçlar açısından sürekli entegrasyon ve dağıtımın (CI/CD) gerçeğe dönüştürülmesine yardımcı olur.

  • Hızlı Dağıtım

Yeni donanımı kurmak, çalıştırmak, tedarik etmek ve kullanılabilir duruma getirmek eskiden günler alırdı ve harcanan çaba ve ek masraflar külfetliydi. Docker tabanlı konteynerler, dağıtımı saniyelere indirebilir. Her işlem için bir kapsayıcı oluşturarak, bu işlemleri yeni uygulamalarla hızla paylaşabilirsiniz. Bir işletim sisteminin bir kapsayıcı eklemek veya taşımak için önyükleme yapması gerekmediğinden, dağıtım süreleri önemli ölçüde daha kısadır. Daha kısa dağıtım süreleriyle birleştiğinde, konteynerleriniz tarafından oluşturulan verileri endişe duymadan kolayca ve uygun maliyetli bir şekilde oluşturabilir ve yok edebilirsiniz.

Docker teknolojisi, verimliliğe daha fazla değer veren daha ayrıntılı, kontrol edilebilir, mikro hizmetlere dayalı bir yaklaşımdır.

Docker Dezavantajları

Docker, tek başına tek konteynerleri yönetebilir. Yüzlerce parçaya ayrılmış konteynerli uygulama giderek daha fazla kullanmaya başladığınızda, yönetim ve düzenleme zorlaşabilir. Sonunda, tüm konteynerlerinizde, ağ oluşturma, güvenlik, telemetri ve daha fazlasını sunmak için bir adım geri atmanız ve konteynerlerinizi gruplandırmanız gerekir. Kubernetes’in geldiği yer burasıdır.

Docker ile geleneksel Linux kapsayıcılarıyla elde ettiğiniz UNIX benzeri işlevlerin aynısını elde edemezsiniz. Bu, uygulamanızın yanında kap içinde cron veya syslog gibi işlemleri kullanabilmeyi içerir. Alt süreçleri sonlandırdıktan sonra torun süreçlerini temizlemek gibi şeylerde de sınırlamalar vardır – geleneksel Linux kapsayıcılarının doğal olarak ele aldığı bir şey. Bu endişeler, yapılandırma dosyasını değiştirerek ve bu yetenekleri baştan ayarlayarak hafifletilebilir, ancak bu ilk bakışta açık olmayabilir.

Bunun da ötesinde, ad alanlı olmayan başka Linux alt sistemleri ve aygıtları vardır. Bunlara SELinux , Cgroups ve /dev/sd* cihazları dahildir. Bu, bir saldırganın bu alt sistemlerin kontrolünü ele geçirmesi durumunda ana bilgisayarın güvenliğinin ihlal edildiği anlamına gelir. Hafif kalmak için, ana bilgisayar çekirdeğinin kapsayıcılarla paylaşılması, bu güvenlik açığı olasılığını açar. Bu, ana bilgisayar sisteminden çok daha sıkı bir şekilde ayrılmış sanal makinelerden farklıdır.

Docker arka plan programı da bir güvenlik sorunu olabilir. Docker konteynerlerini kullanmak ve çalıştırmak için, büyük olasılıkla kapsayıcılar için kalıcı bir çalışma zamanı olan Docker arka plan programını kullanacaksınız. Docker arka plan programı, kök ayrıcalıkları gerektirir, bu nedenle bu işleme kimin eriştiğine ve işlemin nerede bulunduğuna özel dikkat gösterilmelidir. Örneğin, yerel bir arka plan programı, bir web sunucusu gibi daha halka açık bir konumda yaşayan bir arka plan programından daha küçük bir saldırı yüzeyine sahiptir.

BİR CEVAP BIRAK

Please enter your comment!
Please enter your name here