Docker, dünyanın en yaygın kullanılan konteynerleştirme (containerization) aracı. 2025 Stack Overflow Geliştirici Anketi’ne göre Docker, profesyonel geliştiriciler arasında en çok kullanılan araçlardan biri ve kullanımı her yıl artmaya devam ediyor.

Peki Docker tam olarak nedir? Ve bir sanal makineden farkı ne?

Bu yazıda Docker’ın ne olduğunu, konteynerlerin nasıl çalıştığını ve geliştiricilerin yerel geliştirmeden üretim dağıtımına kadar her şey için neden Docker kullandığını öğreneceksiniz.

Docker’ın Çözdüğü Problem

Muhtemelen bunu duymuşsunuzdur:

“Bende çalışıyor.”

Bir geliştirici, uygulamayı kendi bilgisayarında yazar. Yerelde sorunsuz çalışır. Ama sunucuya deploy edildiğinde bozulur. Belki sunucuda farklı bir Python sürümü vardır. Belki bir kütüphane eksiktir. Belki ortam değişkenleri farklıdır.

Bu çok yaygın bir problem. Docker onu çözüyor.

Konteyner Nedir?

Bir konteyner, uygulamanızı ve çalışması için gereken her şeyi (kod, kütüphaneler, ortam değişkenleri ve yapılandırma dosyaları) bir araya paketleyen izole bir ortam.

Uygulamanızı bir konteyner içinde çalıştırdığınızda, her yerde aynı şekilde davranır: kendi bilgisayarınızda, iş arkadaşınızın bilgisayarında, CI/CD sunucusunda ve üretim sunucusunda.

Bir konteyneri, deniz taşımacılığındaki konteynerlere benzetebilirsiniz. Bir nakliye konteyneri yük taşır ve herhangi bir gemiye, kamyona ya da trene yüklenebilir. İçindeki eşyalar için hangi aracın taşıdığı önemli değildir; içerik güvende ve bozulmadan kalır.

Docker Nedir?

Docker, konteynerleri oluşturmayı, çalıştırmayı ve yönetmeyi kolaylaştıran araç katmanı.

Docker’ın üç ana bileşeni var:

  • Docker Engine: Konteynerleri oluşturan ve çalıştıran çalışma zamanı (runtime). Linux, macOS ve Windows üzerinde çalışır.
  • Docker CLI: Docker ile etkileşim kurmak için kullandığınız komut satırı aracı (docker run, docker build, vb.)
  • Docker Desktop: Docker Engine, Docker CLI ve ek araçları içeren, macOS ve Windows için bir GUI uygulaması.

2026 itibarıyla Docker Engine 29 ve üzeri sürümde. v29’daki önemli bir değişiklik: yeni kurulumlarda artık varsayılan olarak containerd image store‘u kullanıyor. Containerd, sektör standardı bir konteyner çalışma zamanı ve bu değişiklik Docker’ı Kubernetes ve diğer araçlarla daha uyumlu hale getiriyor.

Konteynerler ve Sanal Makineler

Bu, anlaşılması gereken en önemli kavram.

Sanal Makineler (VM)

Bir sanal makine, tüm bir bilgisayarı simüle eder. Kendi işletim sistemi, çekirdeği ve donanımı vardır. Host makine üzerinde çalışan bir hipervizör (VMware ya da VirtualBox gibi) VM’leri yönetir.

Host Makine
├── Host İşletim Sistemi
└── Hipervizör
    ├── VM 1: Misafir OS + Uygulama A
    ├── VM 2: Misafir OS + Uygulama B
    └── VM 3: Misafir OS + Uygulama C

VM’ler izole ve güvenli. Ama ağır. Her VM, sadece misafir işletim sistemi için gigabaytlarca RAM kullanabiliyor. Bir VM’i başlatmak dakikalar sürebiliyor.

Konteynerler

Bir konteynerin kendine ait bir işletim sistemi yok. Doğrudan host çekirdeğini (kernel) paylaşıyor. Bu, konteynerleri VM’lerden çok daha hafif yapıyor.

Host Makine
├── Host İşletim Sistemi (Linux çekirdeği)
└── Docker Engine
    ├── Konteyner 1: Uygulama A (OS yok)
    ├── Konteyner 2: Uygulama B (OS yok)
    └── Konteyner 3: Uygulama C (OS yok)

Asıl fark şu: konteynerler host çekirdeğini paylaşır. VM’lerin kendi çekirdeği vardır.

Bu yüzden konteynerler dakikalar yerine milisaniyeler içinde başlıyor. Ve bu yüzden bir konteyner 1 GB yerine 50 MB RAM kullanabiliyor.

Yan Yana Karşılaştırma

ÖzellikKonteynerSanal Makine
Başlatma süresiMilisaniyelerDakikalar
BoyutMegabaytGigabayt
OS ek yüküYok (çekirdek paylaşımlı)Tam misafir OS
İzolasyonSüreç seviyesindeDonanım seviyesinde
TaşınabilirlikÇok yüksekYüksek ama daha ağır
Kullanım alanıUygulama dağıtımı, geliştirme ortamlarıTam OS izolasyonu, eski uygulamalar

Docker Nasıl Çalışır: Temel İş Akışı

Docker’ın üç ana kavramı var: Dockerfile, image ve konteyner.

Dockerfile → docker build → Image → docker run → Konteyner
  1. Dockerfile: Uygulamanızın ortamını oluşturmak için talimatlar içeren bir metin dosyası
  2. Image: Dockerfile’dan derlenen, salt okunur bir şablon (OOP’daki bir sınıf gibi düşünün)
  3. Konteyner: Bir image’ın çalışan bir örneği (bir sınıftan oluşturulan nesne gibi)

Basit bir örnek. Bu Dockerfile bir Python web uygulamasını paketliyor:

# Resmi Python base image'ından başla
FROM python:3.13-slim

# Konteyner içindeki çalışma dizinini ayarla
WORKDIR /app

# Bağımlılık listesini önce kopyala (katman önbelleklemesi için)
COPY requirements.txt .

# Bağımlılıkları kur
RUN pip install -r requirements.txt

# Kodun geri kalanını kopyala
COPY . .

# Uygulamayı başlat
CMD ["python", "app.py"]

Bunu bir image olarak derlersiniz:

docker build -t myapp:1.0 .

Sonra o image’dan bir konteyner çalıştırırsınız:

docker run -p 8080:8080 myapp:1.0

Uygulamanız artık izole bir konteynerde çalışıyor. Docker kurulu olan her makinede aynı şekilde davranacak.

Docker Nerede Kullanılıyor?

Docker, modern yazılım geliştirmenin her yerinde kullanılıyor:

  • Yerel geliştirme: Veritabanlarını, mesaj kuyruklarını ve servisleri yerel olarak kurmadan çalıştırma
  • CI/CD pipeline’ları: Her commit’te temiz, tekrarlanabilir bir ortamda kod derleme ve test etme
  • Mikroservisler: Her servis, diğerlerinden izole kendi konteynerinde çalışır
  • Bulut dağıtımı: Konteyner image’ları AWS, Google Cloud, Azure ya da herhangi bir buluta deploy edilir
  • Kubernetes: K8s, yüzlerce konteyneri birçok makine üzerinde orkestra eder

Docker’ın 2026 Görünümü

Docker son yıllarda hayli gelişti:

  • Docker Engine v29: varsayılan olarak containerd image store, opsiyonel nftables güvenlik duvarı desteği
  • Docker Desktop 4.64+: yerleşik Kubernetes 1.34.3, image taraması için Docker Scout içeriyor
  • Docker MCP Toolkit: 2025’te beta olarak yayınlandı, yapay zeka ajanlarının Docker konteynerleriyle etkileşim kurmasını sağlıyor
  • Docker Hardened Images: minimal saldırı yüzeyine sahip, önceden sertleştirilmiş base image’lar

Docker mu, Podman mu?

Docker, tek konteynerleştirme aracı değil. Podman, özellikle Red Hat/Fedora Linux sistemlerinde popüler bir alternatif.

Temel farklar:

  • Podman daemonsız: arka planda çalışan bir servise ihtiyaç duymuyor. Docker bir daemon çalıştırıyor (dockerd).
  • Podman varsayılan olarak root olmadan (rootless) konteyner çalıştırıyor. Docker geleneksel olarak root gerektiriyordu (rootless Docker artık mevcut olsa da).
  • Podman Docker uyumlu: çoğu docker komutu, podman‘a alias vererek çalışıyor.

Sık Yapılan Hatalar

Konteynerleri “hafif VM” sanmak

Öyle değiller. VM’ler donanımı sanallaştırır. Konteynerler ise işletim sistemi süreç katmanını sanallaştırır. Konteynerler host çekirdeğini paylaşır. Bu yüzden bu kadar hızlı ve hafifler, ve aynı sebeple bir Linux konteyneri çalışmak için bir Linux çekirdeğine ihtiyaç duyar.

Docker’ı konteynerlerle karıştırmak

Docker araç seti. Konteynerler ise teknolojinin kendisi. Docker olmadan da konteyner çalıştırabilirsiniz (doğrudan containerd kullanarak ya da Podman ile). Ama Docker bunu kolaylaştırıyor.

Konteynerlerin geçici (ephemeral) olduğunu unutmak

Bir konteyner durduğunda, içine yazılan tüm veriler kaybolur. Veriyi kalıcı hale getirmek için volume kullanmanız gerekiyor.

Docker ve Türkiye’nin Self-Hosting Kültürü

Türkiye’de bireysel geliştiricilerin ve küçük ekiplerin kendi VPS’lerinde barındırdığı proje sayısı (kişisel bloglar, küçük API’ler, iç araçlar, hobi projeleri) hiç az değil, ve bu senaryoda Docker’ın asıl değeri hız ya da ölçeklenebilirlikten çok izolasyon. Tek bir ucuz VPS üzerinde beş farklı proje çalıştırdığınızı düşünün: biri Node.js 18 istiyor, diğeri Node.js 22, biri belirli bir PostgreSQL sürümüne bağımlı. Konteynerler olmadan bu bağımlılıkları aynı sunucuda çakışmadan yönetmek gerçek bir baş ağrısı. Her projeyi kendi konteynerine koyduğunuzda, her biri kendi bağımlılık setiyle izole çalışır ve birini silmek ya da yeniden kurmak diğerlerini hiç etkilemez.

Bu, VM tabanlı bir izolasyona göre çok daha ucuza geliyor: yukarıdaki karşılaştırma tablosundan hatırlayacağınız gibi, beş ayrı VM çalıştırmak gigabaytlarca RAM gerektirirken beş konteyner aynı işi çok daha az kaynakla yapabiliyor, bu da özellikle bütçesi sınırlı bir Türkiye VPS paketinde fark yaratıyor. Docker’ı gerçekten kurup çalıştırmak istiyorsanız kurulum adımlarının tamamı Docker Nasıl Kurulur? VPS Kurulum Rehberi yazısında.

İlgili Yazılar