Bir uygulamayı Docker ile çalıştırırken her konteyner kendi içinde izole bir yapıya sahiptir. Bu yapı sayesinde servisler birbirini etkilemeden çalışır. Fakat konteyner içinde oluşturulan dosyalar, konteyner silindiğinde otomatik olarak kaybolur. Birden fazla konteynerin aynı dosya veya dizinlere erişmesi gereken durumlarda, veriyi her konteynere ayrı ayrı koymak yönetimi zorlaştırır.
Bu rehberde Docker konteynerleri arasında aynı dosya ve dizinlerin nasıl paylaştıralacağını uygulayarak göstereceğiz.

Konteyner Dünyasında Veri Neden Kaybolur?
Docker konteynerleri geçicidir. Konteynerin katmanlı dosya sistemi, konteyner silindiğinde içindeki tüm yazma verilerini de beraberinde götürür. Çözüm ise veriyi konteynerin döngüsünden ayırmaktır. Docker bize bu noktada Volumes (Birimler) ve Bind Mounts (Bağlama Noktaları) olmak üzere iki ana yol sunar.
-v ile –mount Arasındaki Farkı Uygulamalı Görme
Docker’da birim bağlarken iki farklı yöntem kullanabilirsiniz. Aralarındaki fark sadece görünüş değil, aynı zamanda güvenliktir.
- -v Volume: Daha eski ve kısa bir yöntemdir. Eğer belirttiğiniz kaynak dizin bilgisayarınızda yoksa, Docker bunu otomatik olarak oluşturur. Bu bazen hatalı dizinlerin oluşmasına sebep olabilir.
- –mount: Daha yeni ve açık bir yöntemdir. Anahtar-değer çiftleri kullanır. Eğer kaynak dizin yoksa hata verir ve sizi uyarır. Profesyonel projelerde bu yöntem tercih edilir.
Biz bu çalışmamızda Volume üzerinden ilerleyeceğiz.
Docker Volume Nedir ?
Docker konteynerleri geçicidir. Konteyner silindiğinde içindeki veriler de silinir. Eğer bir uygulama veri üretiyorsa bu veriyi konteynerin dışına çıkarmak gerekir. Docker Volume,
- Veriyi konteynerden bağımsız tutar
- Birden fazla konteyner tarafından paylaşılabilir
- Docker tarafından yönetilir
Bu rehberde tüm veri işlemleri volume üzerinden yapacağız.
Birim Oluşturma ve Listeleme
Öncelikle sistemimizde kullanacağımız ortak havuzu oluşturalım. Terminale şu komutu girerek başlayalım,
sudo docker volume create gfg_paylasimMevcut birimleri kontrol etmek için listeleme komutunu kullanabiliriz.
sudo docker volume lsBirimin Detaylarını İnceleme
Docker’ın bu birimi bilgisayarınızda tam olarak nerede sakladığını görmek isterseniz inspect komutu size “Mountpoint” bilgisini verecektir.
sudo docker volume inspect gfg_paylasimVolume’ü İlk Konteynere Bağlama ve Veri Yazma
Bir dosyayı bir konteynerde oluşturup diğerinden okuyacağız. Aşağıdaki komutla bir Ubuntu konteyneri açıyoruz ve oluşturduğumuz birimi /shared-volume dizinine bağlıyoruz.
sudo docker run -it -v gfg_paylasim:/shared-volume --name konteyner-01 ubuntuKonteyner açıldıktan sonra konteynerin içindeyken şu komutlarla verimizi oluşturalım.
cd /shared-volume<br>echo "Bu veri paylasimli birimden geliyor" > mesaj.txt<br>exitBu adımda
test.txtdosyasını volume içine yazdık- Veri artık konteynerin değil, volume’ün içinde
İkinci Konteyneri Çalıştırma (Veri Okuma)
Şimdi ikinci bir konteyner açıp aynı birimi ona da bağlayalım.
sudo docker run -it -v gfg_paylasim:/shared-volume --name konteyner-02 ubuntuİçeride kontrolümüzü yapıyoruz.
cat /shared-volume/test.txtEğer dosya görünüyorsa iki farklı mikro hizmet, aynı fiziksel veriye tek bir merkezi birim üzerinden erişmiş oldu.
Makineler Arası Veri Paylaşımı ve NFS
Eğer mikro hizmetleriniz tek bir bilgisayarda değil de farklı sunucularda çalışıyorsa, standart birimler yetersiz kalır. Bu durumda NFS sürücülerini kullanmanız gerekir.
docker volume create --driver local --opt type=nfs --opt o=addr=192.168.1.100,rw --opt device=:/data nfs_birimiBu komutla, uzaktaki bir sunucunun diskini yerel bir birimmiş gibi Docker konteynerlerinize bağlayabilirsiniz.
Temizlik ve Güvenlik İpuçları
Verilerinizle işiniz bittiğinde sistemi temiz tutmak önemlidir. Ancak unutmayın, birimi sildiğinizde içindeki tüm veriler kalıcı olarak gider.
- Birim Silme:
docker volume rm birim_adi - Kullanılmayanları Temizle:
docker volume prune - Salt Okunur Bağlantı: Eğer bir konteynerin veriyi değiştirmesini istemiyorsanız
:robayrağını ekleyin:-v birim:/yol:ro
Sık Sorulan Sorular
Volume’ü aynı anda onlarca konteynere bağlarsam performans sorunu yaşar mıyım?
Hizmetler aynı anda aynı dosya üzerinde yazma işlemi yapmaya çalışırsa, dosya kilitlenme sorunları yaşayabilirsiniz. Eğer sadece okuma odaklı bir paylaşım yapıyorsanız, Docker bu yükü çok rahat bir şekilde yönetir.
Bir konteyner silindiğinde içindeki veri kalıyor peki Docker birimini (volume) silersem ne olur?
Birim silindiği an içindeki tüm veriler kalıcı olarak yok olur. Docker, konteyner silindiğinde veriyi korur ama docker volume rm komutuyla birimi sildiğinizde Docker artık o veriden sorumlu değildir.
Birim (Volume) ve Bağlama Noktası (Bind Mount) arasındaki en net fark nedir?
En temel fark yönetimdir. Bind Mount kullandığınızda, host makinedeki bir klasöre bağımlı kalırsınız ve o klasörün izinleri, taşınabilirliği sizin sorumluluğunuzdadır. Volumes ise tamamen Docker’ın kontrolündedir.
- Geliştirme yaparken: Bind Mount kullanın (kod değişikliklerini anında görmek için).
- Canlı sistemlerde ve veritabanlarında: Her zaman Volume kullanın.
Farklı sunuculardaki konteynerler arasında birim paylaşabilir miyim?
Birim Sürücüleri kullanmanız gerekir. Yazımızda bahsettiğimiz NFS, SSHFS veya bulut tabanlı (AWS EBS, Azure Files) sürücüler sayesinde, fiziksel olarak farklı makinelerde bulunan konteynerlerin aynı merkezi depolama alanına erişmesini sağlayabilirsiniz.
Bunlara da Göz Atın
İlginizi Çekebilir – Docker konteynerleriniz arasında sadece veri paylaşmakla kalmayıp, onları doğru ağ mimarisiyle birbirine bağlayabilirsiniz.
Docker Network Driver Tipleri ve Özel Ağ Oluşturma

