irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Rust uygulamalarını Dockerize ederken karşılaşılan en büyük sorun, varsayılan yöntemlerle oluşturulan imajların yüzlerce megabayt boyutuna ulaşmasıdır. Rust binary dosyaları doğası gereği büyüktür, ancak doğru tekniklerle bir web sunucusunu veya CLI aracını 10MB hatta 5MB seviyelerine indirebilirsiniz.
İşte adım adım Rust Docker optimizasyonu:
Dockerfile
Ini, TOML
İşte adım adım Rust Docker optimizasyonu:
1. Multi-Stage Builds (Çok Aşamalı İnşalar)
Docker'da boyutu düşürmenin ilk kuralı, derleme araçlarını (Rust derleyicisi, Cargo, kütüphaneler) son imajın dışında bırakmaktır. Sadece üretilen binary dosyasını hafif bir işletim sistemi katmanına taşırız.2. Alpine Linux ve Musl Target
Varsayılan Rust imajlarıglibc kullanır. Ancak Alpine Linux, çok daha küçük olan musl kütüphanesini kullanır. Uygulamanızı statik olarak linkleyerek Alpine üzerinde çalıştırabilirsiniz.Dockerfile
Kod:
# 1. Derleme Aşaması
FROM rust:1.75-alpine AS builder
RUN apk add --no-cache musl-dev
WORKDIR /app
COPY . .
RUN cargo build --release
# 2. Çalıştırma Aşaması (Sadece 5MB!)
FROM alpine:latest
COPY --from=builder /app/target/release/uygulamam /uygulama
CMD ["/uygulama"]
3. "Scratch": Sıfır İşletim Sistemi
Eğer uygulamanızın çalışma zamanında hiçbir harici bağımlılığı (shell, ssl sertifikaları vb.) yoksa, Docker'ın en küçük tabanı olanscratch kullanabilirsiniz. Bu imajın boyutu 0 byte'tır; imaj boyutu sadece sizin binary dosyanızın boyutu kadar olur.Dikkat:scratchkullanmak için binary'nin tamamen statik olarak derlenmiş olması gerekir.
4. Cargo.toml Optimizasyonları
Binary boyutunu Docker'a girmeden önce Rust seviyesinde küçültmek en etkili yöntemdir.Cargo.toml dosyanıza şu ayarları ekleyin:Ini, TOML
Kod:
[profile.release]
opt-level = 'z' # Boyut için optimize et (s yerine z en küçüğüdür)
lto = true # Link Time Optimization (ölü kodu temizler)
codegen-units = 1 # Daha yavaş derleme ama daha küçük binary
panic = 'abort' # Hata durumunda yığın izlemeyi (unwinding) kaldırır
strip = true # Debug sembollerini siler (Binary boyutunu %50 düşürebilir)
5. UPX (Ultimate Packer for eXecutables)
Eğer her şeyden sonra hala birkaç megabayt kazanmak istiyorsanız, UPX kullanabilirsiniz. UPX, binary dosyanızı sıkıştırır ve çalıştırıldığı anda bellekte açar.- Avantajı: 15MB'lık dosyayı 3-4MB'a düşürebilir.
- Dezavantajı: Başlangıç süresini (startup time) milisaniye düzeyinde artırabilir.
Özet Strateji Tablosu
| Yöntem | Yaklaşık Boyut | Zorluk |
| Standart Docker | 600MB+ | Çok Kolay |
| Multi-stage + Debian Slim | 80MB - 120MB | Kolay |
| Multi-stage + Alpine | 10MB - 20MB | Orta |
| Scratch + Statik + Strip | 3MB - 8MB | İleri |