Docker, uygulamaların bağımlılıklarıyla birlikte paketlenip her ortamda aynı şekilde çalışmasını sağlayan bir konteyner platformudur. “Benim makinemde çalışıyor” probleminin nihai çözümüdür. 2013’te ortaya çıkışından bu yana modern yazılım geliştirmenin temel taşı hâline geldi; 2026 itibarıyla iş ilanlarının %80+’ı Docker bilgisi arıyor.
Bu rehberde temel kavramları, ilk konteynerinizi çalıştırmayı, üretime yönelik best practice’leri ve gerçek dünya senaryolarını öğreneceksiniz. Rehber sonunda Laravel + MySQL + Redis stack’ini Docker ile ayağa kaldırma örneği bulacaksınız.
Konteyner mi VM mi?
Sanal makine, işletim sistemini tamamen sanallaştırır (guest OS kernel + uygulama). Konteyner ise host çekirdeğini paylaşır; çok daha hafiftir. Bir VM GB seviyesinde başlarken konteyner MB seviyesinde ve saniyeler içinde ayağa kalkar. Ölçeklenebilirlik ve deploy hızında konteyner mutlak üstün.
Temel Kavramlar
- Image: Salt-okunur çalıştırılabilir paket. Katmanlıdır; her komut yeni bir katman oluşturur.
- Container: Image’ın çalışan örneği. Aynı image’tan onlarca konteyner çıkabilir.
- Volume: Kalıcı veri. Konteyner silinse bile volume korunur.
- Network: Konteynerler arası ağ. Bridge, host, overlay tipleri var.
- Registry: Image deposu. Docker Hub, GitHub Container Registry, AWS ECR.
İlk Konteyneriniz
docker run -d -p 8080:80 --name my-nginx nginx
Artık http://localhost:8080 üzerinden Nginx varsayılan sayfasını görebilirsiniz. docker ps ile çalışan konteynerleri, docker logs my-nginx ile log’ları görürsünüz.
Temel Komutlar
docker ps -a— tüm konteynerler.docker images— indirilmiş image’lar.docker exec -it my-nginx sh— konteyner içinde shell.docker rm -f my-nginx— konteyneri sil.docker system prune— kullanılmayan kaynakları temizle.
Dockerfile
FROM php:8.3-fpm-alpine
WORKDIR /var/www/html
RUN docker-php-ext-install pdo_mysql opcache
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . .
RUN composer install --no-dev --optimize-autoloader
USER www-data
CMD ["php-fpm"]
Docker Compose
Birden fazla servisi tek YAML dosyasında yönetin: app + db + redis + queue. Tek komutla ayağa kaldırın: docker compose up -d. Servisler birbirlerini isimle bulur (DNS).
Best Practice
- Küçük base image (alpine varyantları).
- Multi-stage build ile üretim image’ını hafifletin.
- Non-root user ile çalıştırın.
- .dockerignore ile gereksiz dosyaları hariç tutun.
- Health check tanımlayın.
- Log’ları stdout’a yazdırın (12-factor).
- Env değişkenlerini secret olarak yönetin.
- Image’ı sabit versiyon tag’i ile pinleyin (latest kullanmayın).
Üretim Notları
- Küçük ölçek: tek sunucuda Docker Compose.
- Orta ölçek: Docker Swarm veya Nomad.
- Büyük ölçek: Kubernetes.
- Managed: AWS Fargate, Google Cloud Run.
Sık Yapılan Hatalar
- Volume kullanmadan veritabanı çalıştırmak.
- Root user ile üretime almak.
- Image boyutunu 1 GB üzeri bırakmak.
- Compose’da
latesttag kullanmak. - Secrets’ı image içine gömerek yayınlamak.
Sıkça Sorulan Sorular
Docker Desktop ücretli mi?
Kişisel ve küçük işletmelerde ücretsiz. Büyük şirketlerde lisans gerekir.
Apple Silicon Mac’te sorun var mı?
Multi-arch image’ları (arm64) kullanın. Rosetta emülasyon yavaş kalabilir.
Kubernetes öğrenmek şart mı?
Küçük ekipler için hayır. Docker Compose + Cloud Run çoğu senaryoyu karşılar.
Sonuç
Docker, modern geliştirme süreçlerinin ayrılmaz parçası. Bu temel kavramlarla 1-2 hafta içinde üretim ortamında güvenle kullanabilirsiniz. Ölçek büyüdükçe Kubernetes veya managed konteyner servislerine geçiş kolaydır.