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.
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.
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
Paylaş
İlgili içerikler
Web Sitesi İçin Güvenilir Yedekleme Stratejisi Nasıl Kurulur?
Bir sitenin veritabanı ve dosyalarını düzenli, test edilmiş ve farklı konumlarda yedekleyen bir stratejinin temel bileşenlerini anlatıyoruz.
2 dk okuma
Yazıyı okuDocker ile Web Uygulaması Dağıtımı: Temel Kavramlar
Docker konteynerlerinin ne olduğunu, geleneksel sunucu dağıtımından farkını ve web uygulamalarını konteynerleştirmenin avantajlarını anlatıyoruz.
2 dk okuma
Yazıyı okuCloudflare Workers ile Sunucusuz (Serverless) Fonksiyonlar
Cloudflare Workers, kod parçacıklarını uç sunucularda çalıştırmanızı sağlayan bir platform. Ne işe yaradığını ve tipik kullanım senaryolarını anlatıyoruz.
2 dk okuma
Yazıyı oku
