Sobes.tech
Middle

Hangi durumlarda çok aşamalı (multi-stage) derleme kullanılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Docker'da çok aşamalı derleme (multi-stage build), aşağıdaki durumlarda kullanılır:

  1. Son görüntü boyutunun azaltılması: Derlemenin ilk (veya ara) katmanında derleme, test veya diğer aşamalar için gerekli araçlar bulunur (örneğin, derleyici, derleme bağımlılıkları). İkinci (son) katmanda ise yalnızca uygulamayı çalıştırmak için gereken artefaktlar kopyalanır (derlenmiş kod, çalıştırılabilir dosyalar, çalışma zamanı kitaplıkları). Bu, gereksiz bağımlılıkların ve derleme araçlarının son görüntüye dahil edilmesini önler ve boyutunu önemli ölçüde azaltır.
  2. Derleme ve çalıştırma aşamalarının ayrılması: Bu net ayrım, derleme sürecinin anlaşılmasını ve hata ayıklamayı kolaylaştırır. Kaynak kodu derleme, testleri çalıştırma, linting gibi aşamalar yapılabilir ve ardından dağıtıma hazır son görüntü oluşturulur.
  3. Güvenliğin artırılması: Son görüntü, minimum gerekli bileşenleri içerir, bu da saldırı yüzeyini azaltır. Derleme araçları ve kaynak kodu, güvenlik açıkları içerebilecek olanlar, üretimde kullanılan görüntüye dahil edilmez.
  4. Derleme hızlandırması (bazı durumlarda): Ara görüntüler önbelleğe alınabilir ve yalnızca son aşamalarda değişiklik yapıldığında tümü yeniden derlenmek zorunda kalmaz.
  5. Derleme sürecinin tekleştirilmesi: Uygulamanın derlenmesi ve Docker görüntüsünün oluşturulması, tek bir otomatik süreç haline gelir ve CI/CD boru hatlarını basitleştirir.

Go uygulaması için örnek:

# Derleme aşaması
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY . .
# Çalıştırılabilir dosyayı derle
RUN go build -ldflags="-s -w" -o myapp .

# Son aşama
FROM alpine:latest
WORKDIR /app
# Önceki aşamadan yalnızca çalıştırılabilir dosyayı kopyala
COPY --from=builder /app/myapp .
# Uygulamayı başlatmak için komut
CMD ["./myapp"]