Blog Yazısı
Spring Boot Uygulamalarını Dockerize Etme Rehberi
Spring Boot projeleri için optimize edilmiş multi-stage Docker build ve güvenli imaj oluşturma teknikleri ile CI/CD süreçlerinizi bir üst seviyeye taşıyın.
Sponsorlu
Spring Boot uygulamasını Dockerize etmek yalnızca imaj üretmek değildir. Production ortamında imaj boyutu, güvenlik, başlatma süresi, environment yönetimi, loglama ve healthcheck davranışı birlikte tasarlanmalıdır. Lokal ortamda çalışan bir container, bu detaylar eksikse sunucuda sorun çıkarabilir.
Multi-stage build
Build araçlarını runtime imajına taşımamak gerekir. Maven veya Gradle build aşamasında kalmalı, final imajda yalnızca JRE ve uygulama artifacti bulunmalıdır. Bu yaklaşım imaj boyutunu küçültür ve attack surface alanını azaltır.
Non-root kullanıcı
Container içinde root kullanıcıyla çalışmak gereksiz risktir. Uygulamanın ihtiyaç duyduğu dizin izinleri önceden hazırlanmalı ve proses ayrı bir kullanıcıyla çalıştırılmalıdır. Bu küçük adım yanlış volume mount veya container zafiyeti etkisini sınırlar.
JVM ve healthcheck
Container memory limitleriyle JVM ayarları uyumlu olmalıdır. Ayrıca liveness ve readiness aynı şey değildir. Readiness trafiğe hazır olmayı, liveness ise prosesin yaşayıp yaşamadığını göstermelidir. Yanlış probe ayarı geçici veritabanı kesintisini sürekli restart döngüsüne çevirebilir.
Secret yönetimi
Veritabanı şifresi, JWT secret ve ödeme anahtarı imaj içine yazılmamalıdır. Environment variable, secret store veya deployment platformunun gizli değişken sistemi kullanılmalıdır. İmaj ortamdan bağımsız kalmalıdır.
Sonuç
Docker, Spring Boot uygulamasını taşınabilir hale getirir; production kalitesi ise Dockerfile ve deploy ayarlarının ayrıntılarında belirlenir. Küçük imaj, non-root çalışma, doğru healthcheck ve güvenli secret yönetimi temel gereksinimlerdir.
Pratik uygulama notu
Deploy öncesinde imajı yalnızca build etmek yetmez; aynı imajın temiz bir ortamda ayağa kalktığını, environment eksik olduğunda anlaşılır hata verdiğini ve health endpointlerinin beklenen sonucu döndürdüğünü kontrol etmek gerekir. Ayrıca imaj tag standardı belirlenmelidir. Commit SHA veya release numarası olmadan rollback süreci gereksiz zorlaşır.