Docker Volume Sürücüleri: Yanlış Seçim Performansı İner

Docker volume'ü seçerken çoğu kişi 'local' ile başlayıp orada kalıyor. Halbuki seçim yanlış olursa container ölür, veri kaybolur veya disk I/O çöker.

Volume sürücüsü seçimi üç soruya bağlı:

1. Veri nerede kalacak? (host, ağ, bulut)
2. Kaç container erişecek? (tek, çoklu)
3. I/O hızı kritik mi? (veritabanı vs log)

Bu üçü yanlış cevaplarsan, üretimde işler ters gider.

local (varsayılan):
- Host makinedeki `/var/lib/docker/volumes` içine yazar
- Tek container, tek host için idealdir
- PostgreSQL, MySQL gibi veritabanları için güvenli
- Dezavantaj: Başka host'a erişemez, scale edemez

bind mount:
- Host'un herhangi bir klasörünü container'a bağlarsın
- Geliştirme ortamında kod sıcak yüklemesi için kullanılır
- Üretimde kullanma, izin sorunları ve veri kaybı riski yüksek
- Sebepler: container silinirse veri direkt host'ta kalır ama yönetim kaos olur

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

nfs (Network File System):
- Kubernetes ortamında birden çok pod'un aynı veriyi okuması gerekiyorsa
- Bir NFS sunucusu kurup tüm container'lar oradan erişir
- Dezavantaj: ağ latansı, sunucu çökmesi tüm container'ları etkiler
- Kullanma sebebi: Kubernetes persistent volume yerine başka çare yok

s3fs, azurefile (bulut):
- AWS S3 veya Azure Blob'a doğrudan mount etme
- Ölçeklenebilir, yedekli, ama pahalı
- Sıkça yazılan veriler için uygun değil (ağ gecikmesi)
- Statik içerik, yedek, log arşivi için mantıklı

Bir PostgreSQL container'ını `local` volume'le başlatıp sonra Kubernetes'e geçmeye çalışırsan:
- Container yeniden başladığında veri kaybolur
- Pod başka node'a geçerse veri erişilemez
- Çözüm: Kubernetes `PersistentVolume` + `PersistentVolumeClaim` kullan, `local` driver'ı bırak

Bind mount ile geliştirme yapıp üretimde aynı kodu çalıştırırsan:
- Host klasörü silinirse container ölü kalır
- İzin sorunları (uid/gid mismatch) veri yazamama sorunu yaratır
- Çözüm: Geliştirmede bind mount, üretimde named volume kullan

- Yerel geliştirme mi? bind mount
- Tek host, veri kalıcı olmalı mı? local volume
- Kubernetes cluster'ında mı? PersistentVolume (driver'ı cluster sağlayıcısı seçer)
- Ağ üzerinden paylaşım gerekli mi? nfs veya bulut driver
- Yüksek I/O, veri çok sık yazılıyor mu? local volume, SSD disk kullan

Volume sürücüsü seçimi ertelenmiş bir karar değil, kurulumun başında doğru yapılırsa container'lar uzun ömürlü olur. Yanlış seçim ise üretimde veri kaybı demektir.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz