Yazılım dünyasının en meşhur cümlelerinden biri: "Ama benim bilgisayarımda çalışıyordu!" Uygulama geliştiricinin makinesinde sorunsuz çalışıyor, sunucuya gelince farklı bir kütüphane sürümü, eksik bir paket ya da farklı bir ayar yüzünden patlıyor. Docker tam olarak bu sorunu çözmek için var. Bu yazıda Docker nedir, ne işe yarar sorularını cevapladık ve ardından Docker'ı Linux, Windows ve macOS üzerine nasıl kuracağınızı adım adım anlattık.
Docker Nedir?
Docker, uygulamaları ihtiyaç duydukları herşeyle birlikte (kod, çalışma ortamı, kütüphaneler, ayarlar) container (konteyner) adı verilen paketlere koyup her yerde aynı şekilde çalıştırmanızı sağlayan açık kaynak bir platform.
Adını da buradan alıyor: limanlardaki yük konteynerlerini düşünün. İçinde ne olursa olsun konteynerin ölçüleri standart; gemiye, trene, kamyona aynı şekilde yükleniyor. Docker container'ları da öyle: içinde Node.js, Python yada PHP olsun, geliştiricinin laptopunda, test sunucusunda ve canlı sunucuda birebir aynı şekilde çalışıyor.
Docker'ın Temel Kavramları
| Kavram | Ne demek? |
|---|---|
| Image (imaj) | Uygulamanın ve ortamının hazır, salt okunur paketi. Bir kalıp gibi düşünebilirsiniz. |
| Container | Bir imajdan başlatılmış, çalışan örnek. Aynı imajdan istediğiniz kadar container açabilirsiniz. |
| Dockerfile | İmajın nasıl oluşturulacağını adım adım tarif eden metin dosyası. |
| Registry / Docker Hub | İmajların saklandığı ve paylaşıldığı depo. Docker Hub en bilinen açık deposu. |
| Volume | Container silinse bile kaybolmayan kalıcı veri alanı (veritabanı dosyaları gibi). |
| Network | Container'ların birbiriyle konuşmasını sağlayan sanal ağ. |
| Docker Compose | Birden fazla container'ı (ör. uygulama + veritabanı) tek bir dosyayla birlikte yönetme aracı. |
Container ile Sanal Makine Arasındaki Fark
İkisi de izolasyon sağlıyor ama çalışma şekilleri çok farklı. Sanal makine kendi işletim sistemiyle birlikte koca bir bilgisayarı taklit ediyor; container ise ana makinenin çekirdeğini paylaşıp sadece uygulamayı izole ediyor.
| Container (Docker) | Sanal makine | |
|---|---|---|
| İçerdiği | Uygulama + kütüphaneler | Tam bir işletim sistemi + uygulama |
| Boyut | Genelde onlarca–yüzlerce MB | Genelde birkaç GB |
| Açılış süresi | Saniyeler | Dakikalar |
| Kaynak kullanımı | Çok düşük ek yük | Her VM için ayrı işletim sistemi yükü |
| İzolasyon | Süreç seviyesinde (çekirdek paylaşılır) | Donanım seviyesinde, daha güçlü |
| Tipik kullanım | Uygulama paketleme, mikroservis, CI/CD | Farklı işletim sistemleri, tam izolasyon |
Not: İkisi rakip değil. Çoğu zaman Docker zaten bir sanal sunucunun içinde çalışıyor.
Docker Ne İşe Yarar?
- Aynı ortam her yerde: Geliştirme, test ve canlı ortam birebir aynı oluyor; "bende çalışıyordu" dönemi bitiyor.
- Hızlı kurulum: Yeni bir geliştirici projeyi tek komutla ayağa kaldırabiliyor, veritabanı kurmakla uğraşmıyor.
- CI/CD: Her commit'te aynı imaj build edilip test ediliyor ve aynı imaj canlıya çıkıyor.
- Mikroservisler: Her servis kendi container'ında, birbirini etkilemeden çalışıyor.
- Kaynak verimliliği: Aynı sunucuda birbirinden izole çok sayıda uygulama çalıştırabiliyorsunuz.
Platformlara Göre Docker
Kuruluma geçmeden önce önemli bir detay: Docker container'ları Linux çekirdeği üzerinde çalışıyor. Bu yüzden Linux'ta Docker doğrudan çalışırken, Windows ve macOS'ta arka planda hafif bir Linux sanal makinesi kullanılıyor.
| Platform | Ne kurulur? | Nasıl çalışır? | Not |
|---|---|---|---|
| Linux | Docker Engine | Doğrudan, en yüksek performans | Sunucular için standart; açık kaynak ve ücretsiz |
| Windows 10/11 | Docker Desktop | WSL 2 (Linux alt sistemi) üzerinden | Donanım sanallaştırma açık olmalı |
| macOS | Docker Desktop | Arka planda hafif bir Linux VM | Apple Silicon (M serisi) ve Intel için ayrı sürüm |
Linux'a Docker Kurulumu (Ubuntu)
Ubuntu'nun kendi deposundaki paket bazen eski kalabiliyor; en doğrusu Docker'ın resmi deposundan kurmak. Önce depoyu ekleyip Docker'ı kuralım:
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Kurulumu test edip kullanıcınıza yetki verelim:
sudo docker run hello-world
# her seferinde sudo yazmamak için kullanıcınızı docker grubuna ekleyin
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world
Ekranda "Hello from Docker!" mesajını görüyorsanız kurulum tamam. Debian, Fedora veya diğer dağıtımlarda adımlar benzer; sadece depo adresi ve paket yöneticisi değişiyor.
Hızlı yol: Test ortamları için Docker'ın resmi kurulum betiği tüm bu adımları tek seferde yapıyor. Üretim sunucularında yukarıdaki elle kurulum daha kontrollü olduğu için önerilir:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Windows'a Docker Kurulumu
Gereksinimler: 64-bit Windows 10 veya 11, BIOS/UEFI'de donanım sanallaştırmanın (Intel VT-x / AMD-V) açık olması ve en az 4 GB RAM (rahat kullanım için 8 GB ve üzeri).
- WSL 2'yi kurun: PowerShell'i yönetici olarak açıp şu komutu çalıştırın, ardından bilgisayarı yeniden başlatın:
wsl --install
# bilgisayarı yeniden başlattıktan sonra güncel olduğundan emin olun
wsl --update
- Docker Desktop'ı indirin: docker.com adresinden Windows için Docker Desktop kurulum dosyasını indirin. İsterseniz winget ile de kurabilirsiniz:
winget install -e --id Docker.DockerDesktop
- Kurulumu tamamlayın: Kurulum sırasında "Use WSL 2 instead of Hyper-V" seçeneğinin işaretli olduğundan emin olun. Kurulum bitince oturumu kapatıp açmanız istenebilir.
- Docker Desktop'ı başlatın: Sağ alt köşedeki balina simgesi sabit durduğunda Docker çalışıyor demektir.
- Test edin: PowerShell veya Windows Terminal'de:
docker version
docker run hello-world
macOS'a Docker Kurulumu
Gereksinimler: macOS'un güncel sürümlerinden biri ve en az 4 GB RAM. İlk ve en önemli adım: Mac'inizin işlemcisini öğrenin (Apple menüsü → Bu Mac Hakkında). Apple Silicon (M1, M2, M3, M4...) ya da Intel için ayrı kurulum dosyaları var.
- İndirin: docker.com'dan işlemcinize uygun Docker Desktop
.dmgdosyasını indirin. - Kurun: Dosyayı açıp Docker simgesini Uygulamalar (Applications) klasörüne sürükleyin.
- İlk açılış: Docker'ı Uygulamalar'dan açın, istenen izinleri onaylayın. Üst menü çubuğundaki balina simgesi sabitlendiğinde Docker hazır.
Homebrew kullanıyorsanız tek komutla da kurabilirsiniz:
brew install --cask docker-desktop
Ardından Terminal'de test edin:
docker version
docker run hello-world
Apple Silicon Mac'lerde bazı eski imajlar sadece Intel (amd64) için hazırlanmış olabilir; Docker bunları emülasyonla çalıştırır ama biraz daha yavaş olur. Mümkünse arm64 destekli imajları tercih edin.
İlk Adımlar: Temel Docker Komutları
| Komut | Ne yapar? |
|---|---|
docker run -d -p 8080:80 nginx | nginx imajından bir container başlatır, 8080 portuna bağlar |
docker ps | Çalışan container'ları listeler (-a ile hepsini) |
docker images | Bilgisayardaki imajları listeler |
docker pull postgres:17 | Bir imajı indirir |
docker build -t uygulamam . | Bulunduğunuz klasördeki Dockerfile'dan imaj oluşturur |
docker logs -f <container> | Container loglarını canlı izler |
docker exec -it <container> sh | Çalışan container'ın içine girer |
docker stop <container> / docker rm <container> | Container'ı durdurur / siler |
docker compose up -d | docker-compose.yml'deki tüm servisleri başlatır |
Basit Bir Dockerfile Örneği
Bir Node.js uygulamasını paketleyen örnek Dockerfile:
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
İmajı oluşturup çalıştırmak için:
docker build -t uygulamam .
docker run -d -p 3000:3000 --name uygulamam uygulamam
Docker Compose ile Uygulama + Veritabanı
Gerçek projelerde genelde birden fazla servis olur. docker-compose.yml ile uygulamayı ve veritabanını birlikte tanımlayıp tek komutla (docker compose up -d) ayağa kaldırabilirsiniz:
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:17
environment:
POSTGRES_PASSWORD: ornek-sifre
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Örnekteki şifreyi gerçek projelerde mutlaka değiştirin ve bir .env dosyasında tutun.
Docker ve Kubernetes
Docker tek bir sunucuda container çalıştırmak için harika. Ama onlarca container'ı birden fazla sunucuda otomatik ölçeklendirmek, çökenleri yeniden başlatmak ve kesintisiz güncellemek gerektiğinde Kubernetes devreye giriyor. Kısacası Docker ile imajınızı hazırlıyorsunuz, Kubernetes ile o imajları büyük ölçekte yönetiyorsunuz. Detaylar için Kubernetes nedir yazımıza bakabilirsiniz; hazır bir cluster ile denemek isterseniz Kubernetes Server paketlerimiz var.
Docker'ı Sunucuda Çalıştırmak
Bilgisayarınızda geliştirdiğiniz uygulamayı yayına almak için Docker'ın kurulu olduğu bir sunucuya ihtiyacınız var. VECDC Developer VDS paketleri Docker kurulu olarak teslim ediliyor; aylık $6'dan başlıyor ve otomatik kurulum sayesinde yaklaşık 5 dakikada hazır. Sunucuya bağlanıp docker compose up -d demeniz yeterli. Docker'ı kendiniz kurmak isterseniz yukarıdaki Linux adımları standart sanal sunucularımızda da birebir çalışıyor. Build ve deploy süreçlerini otomatikleştirmek için CI/CD danışmanlık hizmetimize de göz atabilirsiniz.
Sık Karşılaşılan Sorunlar
| Hata / belirti | Sebep | Çözüm |
|---|---|---|
permission denied ... docker.sock (Linux) | Kullanıcı docker grubunda değil | sudo usermod -aG docker $USER, sonra oturumu kapatıp açın |
| Docker Desktop açılmıyor, WSL hatası (Windows) | Sanallaştırma kapalı veya WSL güncel değil | BIOS'ta sanallaştırmayı açın, wsl --update |
port is already allocated | Port başka bir uygulama veya container tarafından kullanılıyor | Farklı bir port kullanın (ör. -p 8081:80) ya da diğerini durdurun |
| Disk hızla doluyor | Eski imaj, container ve build önbellekleri birikmiş | docker system prune (dikkatli kullanın) |
Cannot connect to the Docker daemon | Docker servisi / Docker Desktop çalışmıyor | Linux'ta sudo systemctl start docker, Windows/Mac'te Docker Desktop'ı açın |
Sık Sorulan Sorular
Docker ücretsiz mi?
Linux'ta kullanılan Docker Engine açık kaynak ve ücretsizdir. Windows ve macOS'taki Docker Desktop ise kişisel kullanım, eğitim ve küçük işletmeler için ücretsiz; belirli bir büyüklüğü aşan şirketler için ücretli abonelik gerektirir.
Docker ile sanal makine arasındaki fark nedir?
Sanal makine kendi işletim sistemiyle tam bir bilgisayarı taklit eder; container ise ana makinenin çekirdeğini paylaşıp sadece uygulamayı izole eder. Bu yüzden container'lar çok daha küçük, saniyeler içinde açılır ve daha az kaynak kullanır.
Windows'ta Docker için Docker Desktop şart mı?
Windows'ta en kolay ve yaygın yol Docker Desktop'tır. İleri seviye kullanıcılar WSL 2 içine kurdukları bir Linux dağıtımına doğrudan Docker Engine da kurabilir, ancak bu daha fazla elle ayar gerektirir.
Docker öğrenmek zor mu?
Temel kullanım için birkaç kavramı (image, container, Dockerfile, volume) ve bir avuç komutu öğrenmek yeterli; çoğu kişi bir iki gün içinde kendi uygulamasını container'a çevirebilir. Ağ, güvenlik ve üretim ortamı detayları zamanla gelir.
Kısacası
Docker, uygulamaları bağımlılıklarıyla birlikte paketleyip her yerde aynı şekilde çalıştırmanızı sağlıyor. Linux'ta doğrudan Docker Engine, Windows ve macOS'ta ise Docker Desktop ile birkaç dakikada kurulup kullanılmaya hazır oluyor. Bir kere alıştığınızda yazılım geliştirme ve yayına alma süreçleriniz çok daha sade hale geliyor. Kurulumda takıldığınız birşey olursa bize yazın.