Neler yeni

Seni de aramızda görmek istiyoruz! 🚀

Bilgi paylaştıkça çoğalır. Şu an misafir olarak buradasın ama sadece birkaç saniyeni ayırarak ücretsiz üye olabilir; binlerce içeriğe erişebilir, sorularını sorabilir ve topluluğumuzun bir parçası olabilirsin. Geliştirmek, öğrenmek ve paylaşmak için hemen aramıza katıl!

🔥 Docker'da Yaptığımız 10 Hata: İmajı 1 GB'dan 80 MB'a Nasıl Düşürdük?

Gökhan

Sahip
Yönetici
Docker imaj optimizasyonu küçültme multi-stage build - Kodeyun

🔥 "İmajımız 1.2 GB, dağıtım 8 dakika sürüyor." Tanıdık geldi mi? Çoğu Docker imajı gereksiz yere şişkindir. Birkaç değişiklikle 1 GB'ı 80 MB'a indirebilirsiniz — hem de aynı uygulamayla. İşte yaptığımız 10 hata ve düzeltmeleri! 🐳

❌ Hata 1: Devasa Temel İmaj​

Kod:
# ŞİŞKO (~1 GB)
FROM node:20

# ZAYIF (~180 MB)
FROM node:20-alpine

# EN ZAYIF (~80 MB, çok aşamalı ile)
FROM node:20-alpine AS builder
Alpine, glibc yerine musl kullanır. Bazı yerel (native) modüller derlenmezse slim etiketini deneyin — yine de büyük kazanç sağlar.

❌ Hata 2: Çok Aşamalı Derleme Kullanmamak​

Derleme araçlarını üretim imajına taşımayın:
Kod:
# 1. Aşama: derle
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 2. Aşama: sadece çalıştır
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/main.js"]
Tek başına bu değişiklik genelde %60-70 küçültür. 📉

❌ Hata 3: Katman Sırasını Yanlış Kurmak​

Kod:
# YANLIŞ: her kod değişikliğinde npm install baştan
COPY . .
RUN npm ci

# DOĞRU: bağımlılıklar önbelleğe alınır
COPY package*.json ./
RUN npm ci
COPY . .
Derleme süresi 4 dakikadan 20 saniyeye inebilir. ⚡

❌ Hata 4: .dockerignore Yazmamak​

Kod:
.git
node_modules
*.log
.env
coverage
Dockerfile
README.md
.git klasörü tek başına yüzlerce MB olabilir. 🗑️

❌ Hata 5: Her Komut İçin Ayrı RUN​

Kod:
# YANLIŞ: 3 katman, önbellek dosyaları kalır
RUN apt-get update
RUN apt-get install -y curl
RUN rm -rf /var/lib/apt/lists/*

# DOĞRU: tek katman, temizlik dahil
RUN apt-get update && \
    apt-get install -y --no-install-recommends curl && \
    rm -rf /var/lib/apt/lists/*

❌ Hata 6: Geliştirme Bağımlılıklarını Taşımak​

Kod:
RUN npm ci --omit=dev
Test ve derleme paketleri üretimde ne arıyor? 🧹

❌ Hata 7: root Kullanıcıyla Çalıştırmak​

Kod:
RUN addgroup -S app && adduser -S app -G app
USER app
Boyut değil ama güvenlik açısından kritik. 🔒

❌ Hata 8: latest Etiketi Kullanmak​

Bugün çalışan derleme, yarın patlar. Sürümü sabitleyin: node:20.11-alpine 📌

❌ Hata 9: Sağlık Kontrolü Koymamak​

Kod:
HEALTHCHECK --interval=30s --timeout=3s \
  CMD wget -qO- http://localhost:3000/health || exit 1

❌ Hata 10: Ne Şiştiğini Ölçmemek​

Bash:
docker images                    # Boyutları gör
docker history imaj:etiket       # Hangi katman şişirmiş?
docker system prune -a           # Çöpü temizle
dive aracıyla imajı katman katman gezip hangi dosyaların yer kapladığını görebilirsiniz. Şaşırtıcı sonuçlar çıkar.

📊 Gerçek Sonuç​

Kod:
Adım                        Boyut     Derleme
--------------------------  --------  ---------
Başlangıç (node:20)         1.180 MB   4 dk 10 sn
Alpine'a geçiş                412 MB   3 dk 40 sn
Çok aşamalı derleme           186 MB   2 dk 05 sn
--omit=dev + .dockerignore     94 MB   1 dk 20 sn
Katman sırası düzeltmesi       94 MB      22 sn

✅ Kontrol Listesi​

  • Alpine veya slim temel imaj
  • Çok aşamalı derleme
  • Bağımlılıklar koddan önce kopyalanıyor
  • .dockerignore dosyası var
  • Geliştirme bağımlılıkları hariç
  • root olmayan kullanıcı
  • Sürüm etiketi sabit

💬 Sizin imajınız kaç MB? Öncesi/sonrası rakamlarınızı yorumlara yazın — en iyi küçültmeyi yapan kazanır! 🏆
 

Konuyu görüntüleyenler

Üst