DockerDevOpsContainersOptimization
Docker İmajlarını %80 Küçültme: Multi-Stage Build ve Alpine İpuçları
Production ortamında konteyner boyutlarını ve güvenlik açıklarını minimuma indirmek için Multi-Stage Build stratejileri ve distroless pratikleri.

Konteyner Dünyasında Boyut Neden Önemlidir?
Bir Docker imajının boyutu yalnızca disk alanı tüketimini değil, aynı zamanda CI/CD pipeline hızını, ağ bant genişliği maliyetini ve en önemlisi saldırı yüzeyini (Attack Surface) doğrudan etkiler.
Gereksiz build araçları (gcc, python derleyicileri, paket yöneticileri) içeren 1.2 GB'lık bir Node.js veya Go imajı, yüzlerce potansiyel CVE açığı barındırabilir.
Multi-Stage Build Yaklaşımı
Multi-Stage Build kullanarak derleme (build) ortamı ile çalışma (runtime) ortamını birbirinden izole ediyoruz:
dockerfile# 1. Aşama: Build & Compile FROM golang:1.22-alpine AS builder WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o api-service ./cmd/api # 2. Aşama: Minimal Production İmajı (Distroless / Scratch) FROM gcr.io/distroless/static-debian12:nonroot WORKDIR / COPY --from=builder /app/api-service /api-service USER nonroot:nonroot EXPOSE 8080 ENTRYPOINT ["/api-service"]
Elde Edilen Kazanımlar:
- İmaj Boyutu: 850 MB'tan yalnızca 18 MB'a düştü.
- Güvenlik: Runtime konteynerinde shell veya paket yöneticisi bulunmadığı için RCE riskleri minimize edildi.
- Dağıtım Hızı: Kubernetes podlarının ayağa kalkma süresi %75 hızlandı.
Bu yazıyı faydalı bulduysanız beğenebilir veya sosyal medyada paylaşabilirsiniz.