Onur Oduncu
Ana SayfaHakkımdaProjelerBlogTeknolojilerİletişim
Onur Oduncu

Uzun ömürlü sistemler tasarlayan ve bilgisini paylaşan bir teknoloji portfolyosu.

© 2026 Onur Oduncu. Tüm hakları saklıdır.

Blog'a Dön

Docker ile Next.js Uygulamasını Production'a Hazırlamak

Multi-stage build, standalone output ve küçük image boyutları için Next.js projelerinde kullandığım Docker yapılandırmasını paylaşıyorum.

14 Temmuz 20260 görüntülenme2 dk okuma
~/blog/docker-nextjs-production-hazirlik

Docker ile Next.js Uygulamasını Production'a Hazırlamak

Next.js uygulamalarını konteynerleştirirken image boyutu ve build süresi kolayca kontrolden çıkabilir. Bu yazıda gerçek bir portfolyo projesinde kullandığım multi-stage Dockerfile yaklaşımını anlatıyorum.

Neden Multi-Stage Build?

Tek aşamalı bir Dockerfile, node_modules, build araçları ve kaynak kodun tamamını nihai image'a taşır. Multi-stage build ile yalnızca çalışma zamanında ihtiyaç duyulan dosyalar (standalone çıktı, statik varlıklar) son image'a kopyalanır.

FROM node:20-alpine AS deps
# bağımlılıkları yükle

FROM node:20-alpine AS builder
# uygulamayı derle

FROM node:20-alpine AS runner
# yalnızca gerekli dosyaları kopyala

output: "standalone" Kullanmak

next.config.ts içinde output: "standalone" ayarı, Next.js'in yalnızca çalışma zamanında ihtiyaç duyulan node_modules alt kümesini otomatik olarak paketlemesini sağlar. Bu tek ayar, image boyutunu yüzde 70'e varan oranda küçültebiliyor.

Root Olmayan Kullanıcı ile Çalıştırmak

Konteyner içinde root kullanıcıyla uygulama çalıştırmak güvenlik açısından risklidir. Ayrı bir sistem kullanıcısı oluşturup uygulamayı bu kullanıcıyla çalıştırmak, konteyner kaçışı senaryolarında etkiyi sınırlar.

Build Zamanı Ortam Değişkenleri

Prisma gibi build sırasında veritabanı bağlantısı bekleyen araçlar için, gerçek olmayan bir DATABASE_URL değeri (dummy connection string) tanımlamak, CI/CD ortamında gereksiz veritabanı bağımlılığını ortadan kaldırır.

Sonuç

Doğru yapılandırılmış bir Dockerfile, hem build sürelerini hem de dağıtım maliyetlerini ciddi oranda azaltır. Bu optimizasyonlara zaman ayırmak, özellikle sık deploy edilen projelerde uzun vadede fark yaratıyor.