Docker 101 — Yeni başlayanlar için adım adım rehber 🎯🐳

Tarık Kaan Koç
Geeks-of-Data
Published in
7 min readMar 7, 2023
🐳

Çoğumuz, özellikle yazılım endüstrisinde çalışan geliştiriciler ve yöneticiler, Docker terimine aşinayız. Docker, dağıtılmış uygulamaların paketlenmesi, dağıtılması ve çalıştırılması konusunda kolaylık sağladığı için IT endüstrisinde bir standart haline geldi. Bugün, Docker’ı baştan sona öğreneceğiz.

Haydi hep birlikte Docker’ı sıfırdan öğrenelim! 🐳🐳🐳

Docker’a Giriş — Ele alınan konu Başlıkları:

  • Docker Nedir?
  • Virtualization (Sanallaştırma) Nedir?
  • Virtualization — Host Nedir?
  • Containerization Nedir?
  • Containerization 🆚 Virtualization
  • Docker Machine 💻
  • Docker Mimarisi 🏗
  • Tipik Yerel İş Akışı 🐜
  • Sonuç 🐳

— Docker Nedir?

Docker, yazılım uygulamalarının paketlenmesi, dağıtımı ve çalıştırılması için kullanılan açık kaynaklı bir platformdur. Bu platform, uygulamaların hızlı ve güvenli bir şekilde taşınması ve dağıtılması için izolasyon ve sanallaştırma teknolojilerini kullanır. Docker, uygulamaların belirli bir altyapıda çalıştırılmaları gerektiğinde ortaya çıkan sorunları çözmek için tasarlanmıştır. Docker konteynerleri, uygulamanın tamamen özelleştirilmiş bir çalışma ortamında çalıştırılmasına olanak tanır. Bu, uygulamaların farklı altyapılar arasında taşınması ve çalıştırılması sırasında ortaya çıkabilecek uyumluluk sorunlarının azaltılmasına yardımcı olur.

Docker’ın çalışma prensibi, konteyner teknolojisi üzerine kuruludur. Docker’ın ana avantajlarından biri, uygulamaların hızlı bir şekilde hazırlanmasına ve dağıtılmasına olanak tanımasıdır. Geliştiriciler, uygulamaları Docker konteynerlerinde hazırlayarak, uygulamanın çalışacağı tüm kütüphaneleri ve ortamı tek bir pakette toplayabilirler.

Sonuç olarak docker için aşağıdaki özellikleri sayabiliriz:

  • Ölçeklenebilirlik 💯
  • Taşınabilirlik 💯
  • Hızlı dağıtım ve izolasyon 💯

— Konuyu anlamayan arkadaşlar için hikayeleştirmek istersek;

Bir gün bir yazılım geliştiricisi, uygulamasını farklı ortamlarda çalıştırmak için büyük bir sorunla karşılaştı. Çalıştığı uygulamaların gereksinimleri, sunucu ortamının yapısına bağlıydı ve her ortama uygulamayı yeniden yapılandırmak gerekiyordu. Bu, zaman alıcı ve hatalarla dolu bir süreçti. Tam da bu sırada Docker, geliştiricinin hayatına girdi. Docker, uygulamaların bir araç seti olarak paketlenmesini ve çeşitli ortamlarda sorunsuz bir şekilde çalıştırılmasını sağlayan bir yazılım teknolojisiydi. Bu, geliştiricilerin, uygulamalarının kurulumu ve çalışması için herhangi bir konfigürasyon değişikliği yapmadan, herhangi bir sunucuda çalıştırabilmelerini sağladı.

Docker, aynı zamanda birçok avantaj sunuyordu. Uygulamalar artık daha hızlı dağıtılabilir, sunucu kaynakları daha iyi kullanılabilir ve uygulama geliştirme süreci daha kolay hale gelebilirdi. Böylece, geliştiriciler zamanlarını uygulama geliştirme sürecine harcayarak işlerini daha iyi yapabilirlerdi. Böylece Docker, uygulama geliştirme ve dağıtım sürecinde devrim yarattı. Artık geliştiriciler, herhangi bir ortamda uygulamalarını sorunsuz bir şekilde çalıştırabiliyorlar. Ve işletmeler, uygulamalarını daha hızlı bir şekilde dağıtarak, daha verimli bir şekilde çalışabiliyorlar.

— Virtualization (Sanallaştırma) Nedir?

Bir zamanlar, bilgisayarlarımız sadece tek bir işletim sistemine sahipti. Ancak gelişen teknolojiyle, birden fazla işletim sistemi kullanmak gerektiğinde bu bir sorun haline geldi. Her bir işletim sistemi için ayrı bir bilgisayar satın almak veya donanım kaynaklarını bölüştürmek gerekiyordu. İşte tam burada, sanallaştırma teknolojisi devreye girdi.

Örneğin, bir uygulama geliştirirken, belirli bir işletim sistemi sürümünde çalışan bir bileşen kullanmanız gerekiyorsa, ancak bilgisayarınızda o sürüm yüklü değilse ne yaparsınız?

İşte burada sanallaştırma devreye giriyor. Bir ana bilgisayar işletim sistemi üzerine bir misafir işletim sistemi yüklemeyi ve geliştiricilere farklı sanal makinelerde birden fazla işletim sistemi çalıştırmalarına olanak tanıyarak, ek donanım kaynakları sağlama ihtiyacını ortadan kaldırmayı amaçlar. Sanal makineler, işletim sistemi, uygulama yazılımı ve diğer gereksinimleri yüklenmiş tamamen izole edilmiş sanal bir bilgisayar ortamıdır. Bu sayede, farklı işletim sistemleri ve yazılımların aynı bilgisayarda sorunsuz bir şekilde çalışması mümkün olur. Ancak sanallaştırma teknolojisi, bazı dezavantajları da beraberinde getirir. Her sanal makine için ayrı kaynaklar tahsis edilmesi gerektiği için, işletim sistemi ve diğer yazılımların her biri için gereksiz yere fazla miktarda bellek ve disk alanı kullanılır. Ayrıca, sanal makinelerin oluşturulması ve yönetimi zaman alıcı ve karmaşık olabilir.

Bu noktada Docker devreye giriyor. Docker, sanallaştırma teknolojisini kullanarak uygulamaların hızlı ve verimli bir şekilde paketlenmesini, dağıtılmasını ve çalıştırılmasını sağlar. Docker, her uygulama için ayrı bir sanal makine oluşturmak yerine, tüm uygulamaları aynı işletim sistemi çekirdeği üzerinde çalışacak şekilde paketler. Bu sayede, farklı yazılım ve uygulamaları izole etmek için gereksiz bellek ve disk alanı kullanımı azaltılır.

— Virtualization — Host Nedir?

Birçok insanın kullandığı bilgisayarlar, bir ana bilgisayarın yani host’un üzerinde çalışan işletim sistemleriyle çalışır. Host, tüm diğer işletim sistemlerini barındıran ve çalıştıran ana bilgisayardır. Ancak, sanallaştırma teknolojisi ile artık bir host üzerinde birden fazla işletim sistemi çalıştırmak mümkündür. (Yani, Sanal makinelerin her biri farklı bir işletim sistemi çalıştıran ayrı bilgisayarlar gibi davranır ve tüm bunlar aynı host üzerinde çalışır.)

— Containerization Nedir?

Bir zamanlar, geliştiriciler için uygulamaları farklı ortamlarda çalıştırmak zorunda kaldıklarında, bu ortamların uyumluluğu ve stabilitesi sıkıntı yaratıyordu. Aynı zamanda, her bir uygulama için ayrı bir sanal makine kullanmak çok fazla kaynak tüketiyor ve karmaşık bir yapı yaratıyordu. Ancak bir gün, bir grup geliştirici bu soruna bir çözüm buldu: konteynerler! Konteynerler, uygulamaları bir çeşit kutuda çalıştırarak, gereksinim duydukları tüm kaynakları tek bir yerde sağlayarak ortamların uyumluluğunu garanti ediyor ve kaynak tüketimini minimize ediyorlar.

Daha sonra, Docker adlı bir araç piyasaya sürüldü ve konteynerleştirme işlemi daha da kolaylaştı. Artık, geliştiriciler Docker kullanarak uygulamalarını birkaç komutla hızlıca paketleyip dağıtabiliyorlar. Docker’ın önemli bir özelliği de her konteynerin kendi bağımsız çalışma ortamına sahip olmasıdır. Her bir konteyner ayrı bir işlem olarak çalışır ve kendi dosya sistemine, ağ bağlantısına ve kullanıcı kimlik doğrulamasına sahiptir. Bu, birçok konteynerin tek bir makine üzerinde çalışabilmesine ve birbirinden tamamen bağımsız olabilmesine olanak tanır.

Artık geliştiriciler, uygulamaları çalıştırmak için ayrı sanal makineler oluşturmak yerine, Docker konteynerleri kullanarak uygulamaları hızlı ve kolay bir şekilde dağıtabiliyorlar. Sonuç olarak, daha hızlı ve daha verimli bir geliştirme süreci ve daha az kaynak tüketimi ile bizler adına sonuçlanmaktadır.

— Containerization 🆚 Virtualization

Konteynerleştirme ve sanallaştırma ile tanıştığımız için, her ikisinin de bir ana makinede birden fazla işletim sistemi çalıştırmamıza izin verdiğini biliyoruz. Sizlere, ufak bir ödevim olsun konteynerleştirme ve sanallaştırma arasındaki farklar nelerdir? Bunu araştırınız…

weaveworks

Containerization, sanallaştırmaya kıyasla daha hafif ve esnektir. Bir konteyner, bir sanal makineden daha hızlı oluşturulabilir ve daha hızlı başlatılabilir. Bunun yanı sıra, bir konteyner, diğer konteynerlerden izole edilmiştir ve bu nedenle bir konteynerde oluşabilecek sorunlar diğer konteynerlere yayılmaz. Bu nedenle, containerization özellikle bulut tabanlı uygulamalarda çok daha yaygın bir şekilde kullanılır. Ancak, sanallaştırmanın da hala birçok kullanım alanı vardır…

— Docker Machine 💻

Docker Machine, genellikle ayrı VirtualBox örneklerinde çalıştırılan bir veya daha fazla yerel makineyi veya Amazon Web Services, Microsoft Azure vb. gibi Bulut sağlayıcılarında barındırılan uzak makineleri yönetmek için kullanılan bir komut satırı aracıdır.

Bir gün şehirdeki geliştiriciler, Docker’ın muhteşem dünyasına atılmaya karar verdiler. Fakat bir sorunları vardı, hepsi farklı işletim sistemleri kullanıyorlardı ve Docker’ın gereksinimlerini karşılamıyorlardı. İşte tam bu sırada Docker Machine ortaya çıktı.

Docker Machine, Docker’ın tüm gücünü kullanan bir araçtır. Farklı işletim sistemleri üzerinde Docker’ı kullanabilmek için oluşturulmuştur. Bu sayede kullanıcılar, tek bir komutla bir Docker sanal makinesi oluşturabilirler ve bu sanal makinede Docker’ı çalıştırabilirler. Docker Machine, birçok farklı sanal makine sağlayıcısıyla uyumlu olarak çalışabilir. Örneğin, VirtualBox, VMware, AWS, Microsoft Azure gibi sağlayıcılardan biri seçilerek sanal makine oluşturulabilir. Bu sanal makine üzerinde çalıştırılan Docker, tüm geliştiriciler için aynı deneyimi sunar ve herhangi bir uyumluluk sorunu yaşanmaz.

Docker Machine ayrıca, kullanıcılara sanal makine üzerinde Docker imajları oluşturma ve dağıtma, sanal makineyi yönetme ve daha birçok işlevi gerçekleştirme imkanı sağlar. Bu sayede, farklı işletim sistemleri üzerinde çalışan geliştiriciler, Docker Machine kullanarak Docker’ın gücünü tam anlamıyla kullanabilirler. Herhangi bir uyumluluk sorunu yaşamadan, tek bir komutla Docker sanal makinesi oluşturabilirler ve tüm avantajlarından faydalanabilirler.

Docker Mimarisi 🏗

Docker, bir client-server mimarisi kullanır. Docker client, Docker build (Oluşturma), Docker pull (Çekme) ve Docker run (Çalıştırma) gibi özellikleri içerir. Client, Docker konteynerlerinin oluşturulması, çalıştırılması ve dağıtılması konusunda yardımcı olan Docker Host’a erişir. Docker Client ve Docker host aynı sistemde çalıştırılabilir veya client uzak Docker host’a bağlanabilir. Her ikisi de REST API’yi kullanarak birbirleriyle iletişim kurarlar ve bunu UNIX soketleri veya ağ üzerinden gerçekleştirirler.

Docker mimarisini aşağıdaki Docker mimari diyagramından daha net bir şekilde öğrenebilirsiniz.

Docker Arc
  • Docker Client: Docker konteynerlerinin oluşturulması, çalıştırılması ve yönetilmesi gibi işlemler için kullanılır.
  • Docker Host: Docker istemcisine hizmet verir ve Docker konteynerlerinin oluşturulması, çalıştırılması ve yönetilmesi işlemlerini gerçekleştirir.
  • Docker Registry: Docker container ve image’ların kaydedildiği yerdir. Bu kaydedilenler, diğer kullanıcılar tarafından da kullanılabilir.

Yukarıda gözlemlendiği üzere docker mimarisi, bir uygulamayı farklı ortamlarda sorunsuz bir şekilde çalıştırma konusunda çok faydalıdır.

— Tipik Yerel İş Akışı 🐜

Az önce öğrendiğimiz gibi Docker, birçok bileşenden oluşan bir mimariye sahiptir ve bu bileşenler, tipik yerel iş akışını gerçekleştirmek için bir araya gelir. Aşağıdaki diyagramdanda gözlemleneceği üzere Docker, tipik bir iş akışına sahiptir:

İş akışı, Dockerfile adı verilen bir dosya ile başlar. Bu dosya, uygulamayı çalıştırmak için gerekli olan tüm paketleri, ayarları ve diğer gereksinimleri içerir. Dockerfile, bir Docker registry’den bir imaj çekebilir veya imajı Dockerfile kullanarak oluşturabilir. Dockerfile ile oluşturulan imaj, Docker ortamında çalıştırılabilir. Bu imajın çalıştırılması, konteyner adı verilen bir öğe oluşturur. Konteyner, uygulamanın çalıştırıldığı bir sanal ortam sunar. Konteynerde yapılan tüm değişiklikler, bir yeni imaj oluşturmak için kaydedilebilir.

Docker, kullanıcılara imaj oluşturma, imaj çekme, imaj yayınlama ve konteyner çalıştırma gibi birçok işlem için komutlar sunmakta olup, konteynerler aynı zamanda bir sanal makine veya bir bilgisayar gibi çalıştırılabilir, durdurulabilir veya yeniden başlatılabilir.

Son olarak, imajımızı başka kullanıcılarla veya sistemlerle paylaşmak istediğimizde, Docker registry’ye yükleyebiliriz. Bu sayede, herkes imajımızı çekebilir ve uygulamamızı kendi ortamlarında çalıştırabilir. Tipik yerel iş akışı sayesinde, uygulamalarımızı farklı ortamlarda sorunsuz bir şekilde çalıştırabilir, işlem sürelerimizi kısaltabilir ve verimliliğimizi artırabiliriz.

— Sonuç 🐳

Docker, IT endüstrisindeki birçok kişi için artık bir standart haline gelmiştir. Bu platform, yazılım uygulamalarının paketlenmesi, dağıtımı ve çalıştırılması için kullanılan açık kaynaklı bir teknolojidir. Konteyner teknolojisi üzerine kurulu olan Docker, uygulamaların hızlı ve güvenli bir şekilde taşınması ve dağıtılması için izolasyon ve sanallaştırma teknolojilerini kullanır. Geliştiriciler, Docker konteynerlerinde uygulamaları hazırlayarak tüm gerekli bileşenleri tek bir pakette toplayabilirler. Bu da uygulamaların hızlı bir şekilde dağıtılmasını ve çalıştırılmasını sağlar. Konteynerleştirme işlemi, uygulamaların farklı ortamlarda çalıştırılması sırasında ortaya çıkabilecek uyumluluk sorunlarını azaltırken kaynak tüketimini de minimize eder. Docker’ın bu özellikleri, yazılım endüstrisindeki birçok kişi tarafından benimsenmiştir ve Docker, yazılım uygulamalarının paketlenmesi, dağıtımı ve çalıştırılması için vazgeçilmez bir araç haline gelmiştir. Bir dahaki sefere, yazılım dünyasında başka bir konu üzerinde duracağız. Yazımız burada sona eriyor. Umarım sizler için faydalı bir başlangıç olmuştur. Video kaynak önerisi olarak kablosuz kedinin video listini yeni başlayanlar için önerebilirim.

Bu yazıda katkı sağlayan “Geeks of Data” ailesine teşekkür ederiz. 🚀

Best Regards…

--

--