Docker Kurulumu — Linux, macOS, Windows
Önceki iki derste container'ın ne olduğunu, Docker ekosisteminin nasıl çalıştığını öğrendik. Şimdi teoriyi pratiğe dökelim — Docker'ı bilgisayarına kuralım ve ilk container'ımızı çalıştıralım.
Bu derste üç farklı platform için adım adım kurulum yapacağız: Linux, macOS ve Windows. Hangi işletim sistemini kullanıyorsan o bölüme atla, ama diğerlerini de göz gezdirmeni öneririm — ekip arkadaşlarına yardım etmen gerektiğinde işine yarayacak.
Bir espresso makinesi aldığını düşün. Kutudan çıkarırsın, su deposunu doldurursun, elektriğe takarsın ve ilk kahveni yaparsın. Ama öncesinde mutfakta yeterli alan var mı, priz uygun mu — bunları kontrol edersin. Docker kurulumu da aynı: önce ön koşulları kontrol edeceğiz, sonra kuracağız, sonra test edeceğiz.
Sistem Gereksinimleri — Kurulmadan Önce Kontrol Et
Hangi platformda olursan ol, şu minimum gereksinimlere ihtiyacın var:
Linux için 64-bit kernel (3.10 üstü, ideal olarak 4.x+), en az 4GB RAM (8GB önerilir) ve en az 20GB boş disk alanı (50GB önerilir). Desteklenen dağıtımlar: Ubuntu 20.04+, Debian 11+, Fedora 38+, CentOS Stream 9+.
macOS için macOS 12 (Monterey) veya üzeri, Apple Silicon (M1/M2/M3) veya Intel, en az 4GB RAM ve 20GB boş disk.
Windows için Windows 10 (Build 19041+) veya Windows 11, WSL2 desteği, BIOS'ta sanallaştırma aktif, en az 4GB RAM.
RAM konusunda önemli bir not: Docker kendisi çok RAM kullanmaz ama üzerinde çalıştıracağın container'lar kullanır. 8GB veya üzeri RAM, rahat bir deneyim için önemli.
Linux Kurulumu (Ubuntu/Debian)
Linux, Docker'ın doğal ortamı. Container'lar zaten Linux kernel özelliklerine dayandığı için burada en saf ve en performanslı deneyimi yaşarsın. macOS veya Windows'taki gibi araya bir VM girmiyor — doğrudan kernel ile çalışıyorsun.
Adım 1: Eski Sürümleri Temizle
Eğer daha önce Docker'ın eski bir versiyonunu kurduysanız, önce onu temizleyelim. İlk kez kuruyorsan bile bu komutu çalıştırmanın zararı yok:
sudo apt-get remove docker docker-engine docker.io containerd runc 2>/dev/null
sudo apt-get updateAdım 2: Gerekli Paketleri Kur
Docker'ın repository'sini HTTPS üzerinden kullanabilmemiz için birkaç yardımcı paket lazım:
sudo apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-releaseAdım 3: Docker'ın GPG Anahtarını Ekle
Bu adım güvenlik için — indirdiğimiz paketlerin gerçekten Docker'dan geldiğini doğruluyoruz:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpgAdım 4: Docker Repository'yi Ekle
Artık Docker'ın resmi apt repository'sini sistemimize tanıtalım:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullAdım 5: Docker'ı Kur
Şimdi asıl kuruluma geçelim. Bu komut Docker Engine, CLI, Compose ve BuildKit'i birlikte kuracak:
sudo apt-get update
sudo apt-get install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-pluginAdım 6: Kurulumu Doğrula
Kurulum başarılı mı, hemen test edelim:
docker --version
# Docker version 24.0.7, build afdd53b
sudo systemctl status docker
# Active: active (running) — güzel, çalışıyor!
sudo docker run hello-world
# Hello from Docker! ✓"Hello from Docker!" mesajını gördüysen tebrikler, Docker çalışıyor!
Adım 7: Sudo Olmadan Docker Kullanımı
Fark ettin mi, docker run komutunu sudo ile çalıştırdık. Her seferinde sudo yazmak can sıkıcı. Bunu çözmek için kullanıcını docker grubuna ekleyelim:
sudo groupadd docker 2>/dev/null
sudo usermod -aG docker $USER
newgrp dockerŞimdi tekrar dene:
docker run hello-world
# Sudo olmadan çalışıyor! ✓⚠️ Güvenlik notu: docker grubuna eklenen kullanıcı, host üzerinde root-eşdeğeri yetkiye sahip olur. Bu ciddi bir yetki — sadece güvendiğin kullanıcıları bu gruba ekle.
Adım 8: Docker'ı Otomatik Başlat
Sistem açıldığında Docker'ın otomatik başlamasını istiyorsan:
sudo systemctl enable docker.service
sudo systemctl enable containerd.serviceHızlı Yol — Tek Komutla Kurulum
Yukarıdaki adımları tek tek yapmak istemiyorsan, Docker'ın resmi kurulum scripti var:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USERBu script test ve geliştirme için harika ama production için manuel kurulum daha kontrollü ve daha güvenli.
Fedora / RHEL / CentOS Kurulumu
Red Hat tabanlı dağıtımlar kullanıyorsan, süreç çok benzer ama apt yerine dnf kullanıyorsun:
# Eski versiyonları temizle
sudo dnf remove docker docker-client docker-client-latest \
docker-common docker-latest docker-engine
# Docker repo ekle
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo \
https://download.docker.com/linux/fedora/docker-ce.repo
# Docker'ı kur
sudo dnf install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
# Servisi başlat
sudo systemctl start docker
sudo systemctl enable docker
# Kullanıcıyı gruba ekle ve test et
sudo usermod -aG docker $USER
sudo docker run hello-worldmacOS Kurulumu
macOS'ta Docker Desktop kullanıyoruz. Hatırla, Docker Engine doğrudan macOS üzerinde çalışmaz — Docker Desktop arka planda hafif bir Linux VM çalıştırır ve container'lar o VM'in içinde çalışır.
Adım 1: Docker Desktop'ı İndir
En kolay yol Homebrew ile:
brew install --cask dockerHomebrew kullanmıyorsan, [docs.docker.com/desktop/install/mac-install](https://docs.docker.com/desktop/install/mac-install/) adresinden indirebilirsin. Apple Silicon (M1/M2/M3) ve Intel için ayrı indirme linkleri var — doğru olanı seç.
Adım 2: Docker Desktop'ı Aç
open /Applications/Docker.appİlk açılışta senden Service Agreement'ı kabul etmeni, gerekli izinleri (networking, file sharing) vermeni isteyecek. Docker Engine başlayana kadar 30-60 saniye bekle — menü çubuğundaki balina ikonu hareket etmeyi bırakınca hazır.
Adım 3: Doğrula
docker --version
docker compose version
docker run hello-world
# Hello from Docker! ✓macOS Optimizasyon Ayarları
Docker Desktop → Settings (⚙️) → Resources bölümünden şunları ayarla:
CPUs: Toplam core sayının yarısı iyi bir başlangıç. 8 core'luk bir Mac'te 4 ver.
Memory: En az 4GB, eğer veritabanı container'ları çalıştıracaksan 6-8GB.
Disk image size: 60GB iyi bir başlangıç. Docker image'ları zamanla yer kaplar.
💡 Önemli ipucu: Settings → General bölümünde VirtioFS seçeneğini aktif et (Apple Silicon Mac'lerde). Bu, dosya paylaşım performansını dramatik şekilde artırır. Bind mount'lar (kodu container'a bağlama) ile çalışırken farkı hissedeceksin.
Windows Kurulumu
Windows'ta Docker Desktop, WSL2 (Windows Subsystem for Linux 2) üzerinde çalışıyor. Yani önce WSL2'yi kurmamız, sonra Docker Desktop'ı kurmamız gerekiyor.
Adım 1: WSL2 Kur
PowerShell'i yönetici olarak aç ve şu komutu çalıştır:
wsl --installBu komut WSL2'yi ve varsayılan Ubuntu dağıtımını kuracak. İşlem bittikten sonra bilgisayarını yeniden başlat.
Yeniden başladıktan sonra doğrula:
wsl --list --verbose
# NAME STATE VERSION
# Ubuntu Running 2VERSION sütununda "2" görüyorsan WSL2 hazır.
Adım 2: Docker Desktop İndir ve Kur
[docs.docker.com/desktop/install/windows-install](https://docs.docker.com/desktop/install/windows-install/) adresinden Docker Desktop'ı indir. Kurulum sırasında "Use WSL 2 instead of Hyper-V" seçeneğini işaretle. Kurulum tamamlandıktan sonra gerekirse bilgisayarı yeniden başlat.
Adım 3: Docker Desktop Ayarları
Docker Desktop açıldıktan sonra Settings'e git:
Settings → General → "Use the WSL 2 based engine" seçili olmalı.
Settings → Resources → WSL Integration → Kullandığın WSL dağıtımını (Ubuntu) aktif et.
Adım 4: Doğrula
docker --version
docker run hello-world
# Hello from Docker! ✓WSL2 Ubuntu terminal'inde de dene — orada da çalışmalı:
wsl
docker run hello-world💡 Windows notu: Docker Desktop'ta iki mod var — Linux containers (varsayılan, önerilen) ve Windows containers. Her zaman Linux containers modunda kal. Windows containers çok niş bir alan ve bu kursta Linux containers kullanıyoruz.
Kurulum Sonrası — Her Platformda Yap
Platform fark etmez, Docker kurulduktan sonra şu adımları takip ederek her şeyin doğru çalıştığından emin ol.
Temel Doğrulama
# Docker CLI versiyonu
docker --version
# Docker Engine detayları
docker version
# Compose versiyonu
docker compose version
# BuildKit versiyonu
docker buildx versionBu dört komut hata vermeden çalışıyorsa, kurulumun tam.
Sistem Bilgileri
docker infoBu komutun çıktısında dikkat etmen gereken birkaç şey var. Storage Driver overlay2 olmalı — bu en performanslı seçenek. Docker Root Dir genellikle /var/lib/docker — disk alanı sorunlarında buraya bakarsın. CPUs ve Total Memory değerleri Docker'ın ne kadar kaynağa erişebildiğini gösterir.
İlk Container'lar
Kurulumu doğruladıktan sonra birkaç container çalıştırarak pratik yapalım:
# Hello World — Docker çalışıyor mu testi
docker run hello-world
# İnteraktif Ubuntu shell — container'ın içine gir
docker run -it ubuntu bash
# İçeride: uname -a, cat /etc/os-release dene, exit ile çık
# Web sunucusu — gerçek bir servis
docker run -d -p 8080:80 nginx
# Tarayıcıda http://localhost:8080 aç — Nginx karşılama sayfası!
# Temizlik — geriye iz bırakma
docker stop $(docker ps -q)
docker system prune -fDocker Daemon Konfigürasyonu
Docker Daemon'un davranışını özelleştirmek istersen, /etc/docker/daemon.json dosyasını kullanırsın. Bu dosya varsayılan olarak mevcut olmayabilir — oluşturman gerekebilir.
İşte production için önerilen bir konfigürasyon:
{
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"dns": ["8.8.8.8", "8.8.4.4"],
"live-restore": true
}Bu konfigürasyondaki her satırı açıklayayım. storage-driver dosya sistemi sürücüsünü belirliyor — overlay2 en performanslısı. log-driver ve log-opts container loglarının ne kadar büyüyeceğini sınırlıyor — bu çok önemli, yoksa loglar zamanla disk'i doldurur! Her container'ın logu maksimum 10MB, en fazla 3 dosya tutuluyor. dns ayarı DNS sunucularını belirliyor — container'ların internete erişememesi sorununu çözer. live-restore ise Docker daemon restart edildiğinde container'ların çalışmaya devam etmesini sağlar.
Konfigürasyonu değiştirdikten sonra daemon'u yeniden başlat:
sudo systemctl restart dockerSorun Giderme — Kurulum Problemleri
Docker kurulumunda en sık karşılaşılan sorunları ve çözümlerini konuşalım.
"Cannot connect to the Docker daemon"
Bu muhtemelen en yaygın hata. Docker servisi çalışmıyor olabilir:
sudo systemctl start dockerHâlâ çalışmıyorsa loglarına bak:
sudo journalctl -xu docker.serviceLinux'ta socket izni sorunu da olabilir. Kullanıcının docker grubunda olup olmadığını kontrol et:
groups $USER
# Çıktıda "docker" görmelisinmacOS'ta Docker Desktop Çok Yavaş veya Çok RAM Yiyor
Docker Desktop → Settings → Resources'tan CPU ve Memory değerlerini düşürebilirsin. Ayrıca kullanılmayan image ve container'ları temizle:
docker system prune -a --volumesVirtioFS'i aktif etmek de dosya paylaşım performansını ciddi şekilde artırır.
Windows'ta WSL2 Sorunu
WSL2 kernel'ını güncellemeyi dene:
wsl --updateSorun devam ediyorsa WSL2'yi yeniden başlat:
wsl --shutdownSonra Docker Desktop'ı tekrar aç.
Linux'ta DNS Çözümleme Sorunu
Container'lardan internet erişimi yoksa, genellikle DNS sorunu:
docker run --rm alpine ping google.com
# ping: bad address 'google.com' — DNS çalışmıyor!Çözüm: daemon.json'a DNS ayarı ekle:
echo '{"dns": ["8.8.8.8", "8.8.4.4"]}' | sudo tee /etc/docker/daemon.json
sudo systemctl restart dockerDisk Alanı Yetersiz
Docker zamanla çok yer kaplar. Hangi ne kadar yer kapladığını gör:
docker system dfBüyük temizlik için:
docker system prune -a --volumes⚠️ Bu komut kullanılmayan her şeyi siler — image'lar, container'lar, volume'lar. Önemli bir şeyin çalışmadığından emin ol.
Docker'ın veri dizinini değiştirmek istersen (örneğin daha büyük bir diske taşımak):
{
"data-root": "/mnt/docker-data"
}Alternatifler — Docker Tek Seçenek Değil
Docker'ı öğreniyoruz çünkü standart ve en yaygın kullanılan. Ama bilmen gereken alternatifler var.
Podman, Red Hat'in geliştirdiği bir container runtime. Docker ile neredeyse aynı komutları kullanır. En büyük farkı: daemon yok (daemonless) ve rootless container varsayılan. alias docker=podman yapabilirsin — komutlar %95 aynı.
Colima, macOS için hafif bir Docker alternatifi. Docker Desktop'tan daha az kaynak tüketir. brew install colima docker ile kurarsın.
Ama tavsiyem şu: öğrenme aşamasında Docker kullan. Docker'ı öğrendikten sonra alternatiflere geçmek çok kolay çünkü temelde aynı konseptler ve benzer komutlar.
Docker Context — Birden Fazla Docker Ortamı Yönetmek
Bu biraz ileri bir konu ama şimdiden bilmen faydalı. Docker Context, farklı Docker Engine'lere bağlanmanı sağlayan bir özellik. Mesela geliştirme makinenden uzak bir sunucudaki Docker'ı yönetmek isteyebilirsin.
# Mevcut context'leri listele
docker context ls
# NAME DESCRIPTION DOCKER ENDPOINT
# default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock
# Uzak sunucuya context oluştur
docker context create production \
--docker "host=ssh://user@production-server.com"
# Context değiştir — artık tüm komutlar production sunucusunda çalışır
docker context use production
docker ps # Production sunucusundaki container'ları görürsün!
# Geri dön
docker context use defaultBu özellik, özellikle birden fazla ortamı yönetirken çok kullanışlı. Lokal makinende oturarak test, staging ve production sunucularındaki Docker'ları kontrol edebilirsin.
Kurulum Sonrası Yapılacaklar Kontrol Listesi
Her şeyin tam olduğundan emin olmak için bir kontrol listesi hazırladım. Kurulumdan sonra bu listeyi takip et:
# 1. Docker versiyonu
docker --version
# ✓ Versiyon numarası görüyorsan Docker CLI kurulu
# 2. Docker daemon çalışıyor mu?
docker info
# ✓ Hata almıyorsan daemon çalışıyor
# 3. Container çalıştırabiliyor musun?
docker run --rm hello-world
# ✓ "Hello from Docker!" mesajını görüyorsan her şey tamam
# 4. Compose çalışıyor mu?
docker compose version
# ✓ Versiyon numarası görüyorsan Compose hazır
# 5. BuildKit çalışıyor mu?
docker buildx version
# ✓ Versiyon numarası görüyorsan BuildKit hazır
# 6. Sudo gerekiyor mu? (sadece Linux)
docker ps
# ✓ Sudo olmadan çalışıyorsa kullanıcı docker grubunda
# 7. İnternet erişimi var mı?
docker run --rm alpine ping -c 1 google.com
# ✓ Yanıt alıyorsan DNS ve internet çalışıyor
# 8. Port mapping çalışıyor mu?
docker run --rm -d -p 8080:80 --name test-nginx nginx
curl http://localhost:8080
docker stop test-nginx
# ✓ HTML yanıtı alıyorsan port mapping çalışıyorBu 8 kontrolün hepsi geçtiyse, Docker tam olarak hazır ve bir sonraki derse geçebilirsin.
İlk Günde Yapılacak Docker Ayarları
Docker'ı kurduktan hemen sonra yapmanı önerdiğim birkaç ayar var. Bunları şimdi yapmazsan, ileride sorun yaşadığında geri dönüp yapmak zorunda kalırsın.
Log Rotasyonu Ayarla (Çok Önemli!)
Varsayılan olarak Docker container loglarını sınırsız büyütür. Bir container günlerce çalışıyorsa ve çok log üretiyorsa, disk dolabilir. Bunu en başından önleyelim:
// /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}Bu ayar her container'ın logunu maksimum 10MB'a sınırlar ve en fazla 3 dosya tutar. Toplam: container başına maksimum 30MB log.
Docker'ı Otomatik Başlat
Sunucu yeniden başladığında Docker'ın otomatik açılmasını iste:
sudo systemctl enable docker
sudo systemctl enable containerdDüzenli Temizlik Alışkanlığı Edin
Docker zamanla kullanılmayan image'lar, durmuş container'lar ve eski build cache ile diski doldurur. Haftada bir şu komutu çalıştırmak iyi bir alışkanlık:
docker system prune -fDaha agresif temizlik (kullanılmayan image'ları da silmek) istersen:
docker system prune -a -fVe ne kadar yer kapladığını görmek istersen:
docker system dfBu komut sana image'ların, container'ların, volume'ların ve build cache'in ne kadar disk alanı kullandığını gösterir. "Docker neden bu kadar yer kaplıyor?" sorusunun cevabı genellikle burada.
Bu Derste Ne Öğrendik?
Linux'ta Docker Engine doğrudan kernel üzerinde çalışır — en performanslı ortam.
aptveyadnfile resmi repo'dan kur.macOS'ta Docker Desktop, Apple'ın sanallaştırma framework'ü ile hafif bir Linux VM çalıştırır.
brew install --cask dockerile veya web sitesinden kur.Windows'ta Docker Desktop, WSL2 üzerinde Linux container'lar çalıştırır. Önce WSL2'yi kur, sonra Docker Desktop'ı.
Kurulum sonrası
docker run hello-worldile doğrula — bu komut Docker'ın uçtan uca çalıştığını test eder.daemon.jsonile log rotasyonu, DNS ve storage ayarlarını yapılandır. Özellikle log rotasyonu production'da olmazsa olmaz.Sorun yaşarsan: Docker servisi çalışıyor mu kontrol et, kullanıcı docker grubunda mı kontrol et, DNS ayarlarını kontrol et.
Bir sonraki derste ellerimizi gerçekten kirletiyoruz — docker run komutunu tüm parametreleriyle, tüm detaylarıyla öğreneceğiz. İlk gerçek container'larımızı çalıştıracağız!
AI Asistan
Sorularını yanıtlamaya hazır