Bu yazıda; hem yazılım sektörünün hem de IT dünyasının artık vazgeçilmez bir parçası haline gelen Docker'dan bahsedeceğiz. Modern uygulamaların geliştirilmesinden dağıtımına kadar pek çok süreci kolaylaştıran Docker'ın neden bu kadar popüler olduğunu, ne işe yaradığını ve neden öğrenilmesi gerektiğini sade ve anlaşılır bir şekilde ele alacağız.
Docker 101'e hoş geldin!
Docker Nedir ?
Evet, tabii ki ilk olarak baş kahramanımız olan Docker nedir? sorusuyla başlayalım.
Docker, aslında geçmişte yaşanan çok büyük bir ihtiyacın sonucu olarak ortaya çıkmış bir yazılımdır. Nasıl ki günlük hayatta kullandığımız uygulamalar (app'ler) işlerimizi hızlandırıp kolaylaştırıyorsa, Docker da yazılım ve IT sektöründe paketleme, dağıtım ve ölçeklendirme gibi süreçleri inanılmaz derecede pratik hale getirir.
Hikâye genelde şöyle başlar: Bir yazılım geliştirdiniz ve artık bu yazılımı farklı ortamlarda çalıştırmak istiyorsunuz. Bir bilgisayar macOS, diğeri Linux, bir başkası Windows… Yetmezmiş gibi bir ortamda Node.js 12, diğerinde Node.js 18, başka birinde Node.js 20 yüklü.
Sonuç? Uygulama bazı ortamlarda tutarsız çalışır, bazılarında hiç çalışmaz. Çünkü bağımlılıklar, sürümler ve sistem farkları ciddi uyuşmazlıklara yol açar.
İşte Docker tam olarak bu problemi ortadan kaldırır. Bir Dockerfile veya docker-compose.yml tanımlarsınız; Docker uygulamanızı tüm bağımlılıklarıyla birlikte paketler. Ardından bu uygulama, hangi işletim sistemi veya ortam olursa olsun aynı şekilde ve sorunsuz olarak ayağa kalkar.
Kısacası Docker:
''Benim bilgisayarımda çalışıyordu" cümlesini tarihe gömen çözümdür.
Şimdi Docker'ın temel mantığını oluşturan sanallaştırma (Virtıalization) ve containerization kavramlarına değinelim
Virtualization(Sanallaştırma)Nedir?
Evet, aslında çoğu kişinin karşısına çıkmıştır. Özellikle Linux derslerinde ya da ilk sistem eğitimlerinde kurduğumuz VirtualBox, VMware gibi sanal makineler… İşte tam olarak sanallaştırma (virtualization) dediğimiz kavram budur.
Sanallaştırma; tek bir fiziksel bilgisayar üzerinde, birden fazla işletim sistemini birbirinden tamamen bağımsız şekilde çalıştırabilmemizi sağlar. Örneğin kendi bilgisayarın Windows iken, aynı anda bir Linux işletim sistemini sanal makine üzerinde çalıştırabilirsin. Bu sanal makinenin:
- Kendi işletim sistemi vardır
- Kendi disk alanı, RAM ve CPU payı bulunur
- Ana sistemden izole şekilde çalışır
Ancak bu yapı, her sanal makine için ayrı bir işletim sistemi çalıştırdığı için:
- Daha fazla kaynak tüketir
- Daha yavaştır
- Kurulumu ve yönetimi daha zahmetlidir
İşte bu noktada, bir sonraki adım olarak containerization devreye girer — ki Docker'ı asıl güçlü yapan da burasıdır.
Containerization Nedir?
Aslında sanallaştırmayı anladıysak, Containerization kavramını anlamak çok daha kolay.
Containerization; sanallaştırmanın aksine, her uygulama için ayrı bir işletim sistemi çalıştırmaz. Bunun yerine, tüm container'lar aynı işletim sistemi çekirdeğini (kernel) paylaşır. Yani ortada tek bir OS vardır, ama uygulamalar birbirinden izole şekilde çalışır.
Şöyle düşünelim: Bir yazılımınız var ve bu yazılımın çalışması için Node.js, bazı kütüphaneler ve belirli ayarlar gerekiyor. Containerization sayesinde, uygulamayı bu bağımlılıklarıyla birlikte tek bir paket haline getirirsiniz. Bu pakete container denir.
Bu sayede:
- Uygulama her ortamda aynı şekilde çalışır
- İşletim sistemi farkları problem olmaktan çıkar
- Çok daha hafif ve hızlıdır
- Aynı makinede yüzlerce container çalışabilir
Yani özetle:
Sanallaştırma = Her uygulama için ayrı işletim sistemi Containerization = Aynı işletim sistemi üzerinde izole uygulamalar
Docker da tam olarak bu containerization mantığını kullanarak, uygulamaları hızlı, taşınabilir ve yönetilebilir hale getirir.
Sanallaştırma vs Containerization

Aslında yukarıdaki görsel, Containerization kavramını oldukça net bir şekilde anlatıyor. Container yapısının ne kadar basit, hafif, hızlı ve kolay yönetilebilir olduğunu; sanallaştırma ile arasındaki farkları tek bakışta görmek mümkün.
Bu görselde de açıkça görüldüğü gibi, Virtualization tarafında her sanal makine kendi işletim sistemine sahip olduğu için daha ağır, daha yavaş ve daha fazla kaynak tüketen bir yapı söz konusuyken; Containerization tarafında uygulamalar aynı işletim sistemi üzerinde, izole ama çok daha verimli bir şekilde çalışıyor.
Özetle:
- Container'lar daha hızlı ayağa kalkar
- Daha az kaynak tüketir
- Ortam farklarını büyük ölçüde ortadan kaldırır
- Yönetimi ve ölçeklenmesi çok daha kolaydır
İşte Docker'ı modern yazılım dünyasında bu kadar popüler yapan temel fark da tam olarak buradan gelir.
Bu yazıyla birlikte Docker 101 kapsamında aslında sağlam bir temel attık. Docker ihtiyacının nereden doğduğunu, hangi problemleri çözdüğünü ve temelde nasıl çalıştığını; sanallaştırma ve containerization kavramları üzerinden sade bir şekilde ele aldık.
Bir sonraki yazı olan Docker 101 — Part 2'de ise işin biraz daha pratiğine girerek; Docker Image nedir, Docker Container nedir, Dockerfile ne işe yarar, Docker Compose nedir ve Docker ile Docker Compose arasındaki farklar gibi konulara detaylıca değineceğiz.
Yani bu yazı temeli attı, sıradaki yazı ise Docker'ı gerçekten kullanmaya başladığımız nokta olacak.