- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
1GB'lık İmaj mı, 10MB'lık İmaj mı?
Go derlendiğinde tek bir çalıştırılabilir dosya (Binary) üretir. Bu yüzden Go uygulamalarını Docker'a koyarken Python veya Node.js gibi devasa çalışma zamanlarına (Runtime) ihtiyacımız yoktur.Standart yöntemle Docker image oluşturursanız boyut 800MB olabilir. Multi-stage Build ile bunu 10MB'a düşürebiliriz!Multi-stage Dockerfile Örneği
Kod:
[HEADING=2]1. AŞAMA: Derleme (Builder Stage)[/HEADING]
[HEADING=2]Golang yüklü büyük imajı kullanıyoruz[/HEADING]
FROM golang:1.21-alpine AS builder
WORKDIR /appCOPY . .
[HEADING=2]CGO_ENABLED=0 -> Statik binary üretir (dış kütüphane bağımlılığı olmaz)[/HEADING]
RUN go mod downloadRUN CGO_ENABLED=0 GOOS=linux go build -o main .
[HEADING=2]2. AŞAMA: Çalıştırma (Runner Stage)[/HEADING]
[HEADING=2]"scratch" -> Boş, içinde hiçbir şey (işletim sistemi bile) olmayan imaj[/HEADING]
[HEADING=2]Veya "gcr.io/distroless/static" kullanılabilir (daha güvenli)[/HEADING]
FROM scratch
WORKDIR /root/
[HEADING=2]Sadece derlenmiş dosyayı (binary) kopyalıyoruz[/HEADING]
COPY --from=builder /app/main .
[HEADING=2]Uygulamayı çalıştır[/HEADING]
CMD ["./main"]