Yusuf
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.

Yusuf
Yusuf
••6 dk okuma•418 okuma
Docker İmajlarını %80 Küçültme: Multi-Stage Build ve Alpine İpuçları

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:

  1. İmaj Boyutu: 850 MB'tan yalnızca 18 MB'a düştü.
  2. Güvenlik: Runtime konteynerinde shell veya paket yöneticisi bulunmadığı için RCE riskleri minimize edildi.
  3. 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.
Yusuf Aytaş

Yusuf Aytaş

Yazılım Mühendisi — Cloud & DevOps

Bulut mimarileri, Kubernetes, Docker, Terraform ve CI/CD otomasyonları üzerine çalışıyorum. Teknik deneyimlerimi ve projelerimi burada paylaşıyorum.