İçeriğe geç

Rehber

Docker multi-stage build ile daha küçük ve güvenli imajlar oluşturmak

Tek aşamalı bir Dockerfile, derleme araçlarını ve gereksiz dosyaları da production imajına taşır. Multi-stage build bu sorunu doğrudan çözer.

2 dk okumaİleri seviye
Docker multi-stage build ile daha küçük ve güvenli imajlar oluşturmak — editoryal kapak görseli

Bir uygulamayı derlemek genellikle production'da hiç gerekmeyen araçlar gerektirir: derleyiciler, build araçları, geçici dosyalar. Bunları tek bir Dockerfile'da tuttuğunuzda, bu araçlar da nihai imaja dahil olur. Docker'ın multi-stage build özelliği, bu problemi doğrudan çözer.

Multi-stage build nasıl çalışır?

Docker'ın resmî dokümantasyonuna göre multi-stage build, tek bir Dockerfile içinde birden fazla FROM ifadesi kullanmayı sağlar. Her FROM yeni bir aşama başlatır ve önceki aşamadan yalnızca ihtiyaç duyulan dosyalar (örneğin derlenmiş binary) bir sonraki aşamaya kopyalanır — derleme araçlarının kendisi nihai imaja dahil olmaz.

Somut bir örnek: bir Node.js uygulaması

Bir Node.js uygulamasını derlemek için tam bir geliştirme ortamı (devDependencies, build araçları) gerekir, ama çalıştırmak için yalnızca derlenmiş kod ve production bağımlılıkları yeterlidir. Multi-stage build'de ilk aşama 'node' imajını kullanıp derlemeyi yapar; ikinci aşama daha küçük bir 'node:alpine' imajından başlayıp yalnızca derlenmiş çıktıyı ilk aşamadan kopyalar. Sonuç: production imajı, build araçlarını hiç içermez.

Docker multi-stage build sürecinde build ve production aşamaları arasındaki dosya kopyalamayı gösteren diyagram
Multi-stage build: build aşamasından yalnızca gerekli dosyalar production aşamasına kopyalanır.

Bunun somut faydaları

  • Daha küçük imaj boyutu: daha hızlı indirme/dağıtım, daha az disk kullanımı
  • Daha küçük saldırı yüzeyi: derleme araçlarında bulunabilecek güvenlik açıkları production imajına taşınmaz
  • Daha temiz bir Dockerfile: her aşama kendi sorumluluğuna odaklanır

Yaygın hatalar

  • Tüm aşamaları tek bir dev ortamı gibi kurup gerçek ayrımı yapmamak
  • Bir önceki aşamadan gereğinden fazla dosya kopyalamak (yalnızca gerçekten gereken dosyaları COPY --from ile taşımak gerekir)
  • Son aşamada hâlâ ağır bir taban imaj (base image) kullanmak — alpine gibi daha küçük taban imajlar tercih edilmeli

Sonuç

Multi-stage build, ek bir araç veya karmaşık bir yapılandırma gerektirmeden, tek bir Dockerfile içinde daha küçük ve güvenli production imajları üretmenin standart yoludur. Yeni bir Dockerfile yazarken bunu baştan düşünmek, sonradan imaj boyutunu küçültmeye çalışmaktan çok daha kolaydır.

Kategoriler

Etiketler

Kaynaklar

  1. Docker Docs — Multi-stage builds

Paylaş

Docker Multi-Stage Build Rehberi | KTYAPTECH