Dockerfile & Docker Compose Builder
Next.js 15+ (Standalone), Node.js, Python FastAPI (uv/pip), Go, Bun, Rust ve .NET 9 için üretime hazır, multi-stage hafif imajlar; PostgreSQL, Redis, MongoDB, RabbitMQ, MinIO servisleri ve tek tıkla .env.example konfigürasyonu üretin.
Derleyici araçlarını son imajdan atarak dosya boyutunu %90 küçültür (örn: 1 GB → 85 MB).
Root kullanıcısı yerine izole appuser tanımlayarak container breakout açıklarını önler.
Veritabanı bağlantı kabul etmeden uygulamanın açılmasını engelleyerek çökme döngülerini bitirir.
Modern Konteyner Mimarisi, Dockerfile Optimizasyonu ve DevSecOps Kılavuzu
Günümüz bulut bilişim ekosisteminde (Kubernetes, AWS ECS, Google Cloud Run, Fly.io, Coolify ve Dokploy) konteynerlerin boyutu, açılış hızı (cold-start) ve güvenlik sertleştirmesi doğrudan altyapı maliyetlerini ve servis kesintisizliğini belirler. Dockerfile & Docker Compose Builder; Next.js 15 Standalone, Python FastAPI (uv), Node.js, Go, Bun, Rust ve .NET 9 mimarileri için çok aşamalı (multi-stage) derleme standartlarında, güvenliği zırhlandırılmış ve orkestrasyonu hazır konfigürasyonlar üretir.
1. Multi-Stage (Çok Aşamalı) Derlemenin Anatomisi ve Katman Önbellekleme
Geleneksel tek aşamalı (single-stage) Dockerfile dosyalarında, kaynak kodun derlenebilmesi için gereken tüm ağır derleyiciler (C/C++ toolchain, TypeScript derleyicisi, Cargo, Go derleyicisi, pip build araçları) son imajda kalır. Bu durum 1 GB'ı aşan şişkin imajlara ve yüzlerce gereksiz güvenlik açığına (CVE) yol açar.
Multi-stage mimaride süreç aşamalara bölünür:
- Dependencies (Bağımlılık) Aşaması: Yalnızca
package.jsonveyapyproject.tomlkopyalanarak paketler kurulur. Böylece kaynak kod her değiştiğinde bağımlılıklar baştan indirilmez, Docker layer cache kullanılır. - Builder (Derleme) Aşaması: Kod derlenir (ör.
next buildveyacargo build --release) ve statik çıktılar hazırlanır. - Runner (Üretim) Aşaması: Yalnızca minimal Alpine veya Debian-slim çalışma zamanı kullanılır. Yalnızca çalışması gereken tek bir binary veya izole sunucu dosyası kopyalanır.
2. Next.js 15+ App Router ve Standalone Modu
Next.js projelerinde standart bir node_modules klasörü kolaylıkla 800 MB - 1.2 GB boyutuna ulaşabilir. next.config.js içine output: "standalone" eklendiğinde, Next.js yalnızca sayfalarda kullanılan gerçek paketleri tespit eder (tree-shaking) ve bağımsız bir server.js oluşturur. Bu sayede üretim imajı yaklaşık 85 MB seviyesine iner.
3. DevSecOps: Non-Root Kullanıcı ve Container Breakout Önleme
Varsayılan olarak Docker konteynerleri root (UID 0) yetkisiyle başlar. Uygulamanızda meydana gelebilecek bir uzaktan kod yürütme (Remote Code Execution - RCE) açığında, saldırgan ana makinenin (host) çekirdeğine doğrudan root ayrıcalığıyla erişebilir. Aracımız tarafından otomatik eklenen USER nextjs veya USER appuser (UID 1001) direktifi, konteyner izolasyonunu en yüksek güvenlik seviyesine taşır.
4. Docker Compose v2 ve condition: service_healthy Mekanizması
Eski Docker Compose sürümlerinde yer alan standart depends_on: [postgres] tanımı yalnızca veritabanı konteynerinin başlatıldığını kontrol eder; veritabanının soketleri açıp sorgu kabul etmeye hazır olduğunu doğrulamaz. Bu durum uygulamanın "Connection refused" hatasıyla çökmesine (crashloop) neden olur.
Aracımızın ürettiği Docker Compose v2 şablonu, PostgreSQL için pg_isready, Redis için redis-cli ping, MongoDB için mongosh ping sağlık kontrollerini tanımlar ve ana uygulamayı condition: service_healthy ile kilitler.
5. Python Konteynerlerinde Devrim: Astral 'uv' ile Hızlandırılmış Derleme
FastAPI ve Flask mikroservislerinde geleneksel pip install -r requirements.txt komutları uzun süren bağımlılık çözümlemeleri nedeniyle CI/CD sürelerini uzatır. Astral tarafından geliştirilen Rust tabanlı uv, paket kurulumlarını 10 ila 100 kat hızlandırır. Konfigüratörümüz, Python seçildiğinde uv pip install --system komutlarıyla optimize edilmiş derleme katmanını otomatik hazırlar.
6. Karşılaştırma: Standart Dockerfile vs. Optimize Multi-Stage
| Metrik / Kriter | Standart Tek Aşamalı Dockerfile | Optimize Multi-Stage (Aracımız) |
|---|---|---|
| Next.js İmaj Boyutu | ~1.2 GB - 1.5 GB | ~85 MB - 110 MB (%92 Tasarruf) |
| Go / Rust Binary Boyutu | ~800 MB (SDK dahil) | ~15 MB - 25 MB (Scratch / Alpine) |
| Güvenlik Profili | Root Kullanıcı (UID 0, Yüksek Risk) | Non-Root (appuser / nextjs UID 1001) |
| Veritabanı Çökme Koruması | Yok (Hemen başlar ve çöker) | Otomatik service_healthy Senkronizasyonu |
| İmaj İndirme (Pull) Süresi | 45 - 90 saniye | 2 - 5 saniye (Instant Startup) |
7. Diğer Geliştirici Araçlarıyla Birlikte Kullanım
Konteynerize ettiğiniz uygulamanızın API uçlarını modern fetch isteklerine dönüştürmek için cURL to Modern Fetch aracımızı kullanabilir; veritabanı sorgularınızı ve index yapılarınızı optimize etmek için AI SQL Optimizer eklentimizden yararlanabilirsiniz. AI kodlama editörleri için standart kurallar üretmek isterseniz .cursorrules Generator aracımızı inceleyebilirsiniz.
İmajın tamamını indirmeden konteyner başlatmayı Docker lazy loading rehberi yazısında eStargz ve SOCI üzerinden anlattım.