Veritabanı SistemleriWeb Sunucuları

      Docker’da Konteynerler Arası Volume ile Veri Paylaşımı Nasıl Yapılır?

      Docker kullanmaya yeni başlayanların en sık karşılaştığı sorun, konteyner durduğunda verilerin kaybolmasıdır. Konteynerler izole çalıştığı için birinin yazdığı dosyayı diğeri göremez. Bu durum, özellikle paylaşımlı veri gerektiren mikro hizmet projelerinde işleri zorlaştırır. Veriyi her yere kopyalamak yerine, tüm konteynerlerin ortaklaşa kullanabileceği bir sistem kurmak çok daha mantıklıdır. Bu rehber boyunca, paylaşımlı birimler oluşturarak bu sorunu nasıl kökten çözeceğinizi adım adım uygulayacağız.

      Konteynerlerde Kalıcı Veri Oluşturma

      Docker konteynerleri geçici yapılar olduğu için içlerinde saklanan dosyalar konteyner silindiğinde kaybolur. Verinin kalıcı hale gelmesi için veriyi konteynerin döngüsünden ayırmak şarttır. Docker, bu ihtiyacı karşılamak adına Volumes (Birimler) ve Bind Mounts (Bağlama Noktaları) yöntemlerini kullanarak veriyi güvenli bir alana taşımanıza yardımcı olur.

      -v ve –mount Yöntemlerini Karşılaştırma

      Birim bağlama işlemlerinde kullanılan yöntemler, projenizin güvenliğini doğrudan etkiler. Klasik -v yöntemi hızlıca sonuç verir ancak kaynak dizin bulunamadığında Docker’ın otomatik klasör açmasına neden olur. Profesyonel sistemlerde tercih edilen --mount ise daha belirgin kurallarla çalışır ve eksik dizinlerde hata vererek sizi korur. Uygulama kısmında biz Volume kullanımı üzerinden ilerleyeceğiz.

      Neden Docker Volume Kullanmalıyız?

      Konteynerler silindiğinde verilerin kaybolması büyük bir sorundur. Bu yüzden veriyi konteynerin dışındaki bir alana çıkarmamız gerekir. Docker Volume sayesinde verileriniz konteynerden bağımsız yaşar ve farklı konteynerler tarafından kolayca paylaşılabilir. Bu rehberde tüm işlemlerimizi bu güvenli birimler üzerinden yürüteceğiz. Hazırsanız, ilk adım olarak sistemimizde yeni bir birim oluşturalım

      sudo docker volume create gfg_paylasim

      Mevcut birimleri kontrol etmek için listeleme komutunu kullanabiliriz.

      sudo docker volume ls

      Birimin 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_paylasim

      Veriyi Paylaşımlı Birime Aktarma

      Sıradaki işlemimizde, oluşturduğumuz ortak havuzu bir konteynerin içine dahil edeceğiz. Bir Ubuntu konteyneri başlatarak, birimimizi konteyner içindeki /shared-volume klasörüne bağlıyoruz. Bu sayede bu klasör içine yazacağımız her şey, konteyner silinse bile ortak alanımızda kalmaya devam edecek. İşte kullanacağımız komut

      sudo docker run -it -v gfg_paylasim:/shared-volume --name konteyner-01 ubuntu

      Konteyner 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>exit

      Bu adımda

      • test.txt dosyası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.txt

      Eğer dosya görünüyorsa iki farklı mikro hizmet, aynı fiziksel veriye tek bir merkezi birim üzerinden erişmiş oldu.

      Birden Fazla Makinede Ortak Veri Yönetimi

      Mikro hizmetlerin farklı sunuculara dağıldığı senaryolarda, yerel Docker birimleri veriyi paylaşmak için yetersiz kalır. Çözüm olarak, ağ tabanlı bir dosya sistemi olan NFS sürücülerine başvururuz. NFS kullanarak, uzaktaki bir sunucunun depolama alanını sanki kendi bilgisayarınızdaymış gibi konteynerlerinize bağlayabilirsiniz.

      docker volume create --driver local --opt type=nfs --opt o=addr=192.168.1.100,rw --opt device=:/data nfs_birimi

      Bu komutla, uzaktaki bir sunucunun diskini yerel bir birimmiş gibi Docker konteynerlerinize bağlayabilirsiniz.

      Birimleri Yönetirken Dikkat Edilmesi Gerekenler

      Docker’da oluşturduğunuz birimler siz silene kadar sistemde kalır. Gereksiz birimleri silerek disk alanınızı boşaltabilirsiniz, ancak bu işlem verileri geri dönülemez şekilde yok eder. İsimle silme işlemi için rm, toplu temizlik için ise prune komutları kullanılır. Eğer bir servisin sadece veriyi görmesini ama değiştirmemesini istiyorsanız, bağlama komutuna :ro bayrağını ekleyerek güvenli bir erişim sağlayabilirsiniz.

      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 Ağ Sürücüleri ve Özel Ağ Kurulumu

      Hi, I’m Spesifik

      Bir yanıt yazın

      E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir