Docker Volume ile Kalıcı Veri ve Veri Paylaşımı

Merhaba arkadaşlar , Mobilhanem üzerinden anlattığımız Docker derslerine devam ediyoruz. Bir önceki derslerimizde Docker containerlarının bir sunucuda izole ortam oluşturduğundan, ve her containerın dosya sisteminin kendisine ait olduğundan bahsetmiştik. Bu dersimizde ise Docker volume ’lerini kullanarak container’a dışarıdan nasıl dosya verilebilir, container kapandıktan sonra bu dosyalar nasıl kalıcı hale gelir ve birden fazla container nasıl dosya paylaşabilir konularına değineceğiz.

Docker Volumes

Docker’da kalıcı veri için mutlaka volume kullanmamıza gerek yok. Bir container durdurulup, yeniden başlatıldığında kendi izole dosya sistemi ile devam edeceğinden, dosyalarınız en son bıraktığınız gibi durur. Docker volume ise container’ın izole sisteminden ayrı bir klasörü container’da herhangi bir klasöre bağlamanızı sağlar. Bu sayede Docker’ın katmanlı dosya sisteminde yer almaz ve daha fazla performans alabilirsiniz. Bu özellik, veri tabanı gibi diski yoğun olarak kullanan uygulamalarda önem teşkil eder. Ayrıca Docker’da volume eklentileri ile NFS, NetApp ve Ceph gibi network dosya sistemlerini kolaylıkla kullanabilirsiniz. Başka bir avantaj ise, volume’leri birden fazla container’a takabilir, bağlı olan container’ları kolaylıkla durdurup silebilirsiniz. Böylece her seferinde baz imajla başlayabilir ve değişiklikler eklediğiniz volume’lerle sınırlı kalabilir. 

Docker container’ına volume bağlamanın en kolay yolu docker run komutuna -v parametresi ile sunucundan hangi klasörün container’da hangi klasöre bağlanacağını yazmaktır. Detaylı örneği aşağıda görebilirsiniz:

Yukarıdaki örnekte dosyalarim adında bir klasörü container’ımızın kök dizinine /windowstan adında bir klasör ile bağladık. İçinde ise container başlamadan Windows’ta oluşturduğumuz dosyaları görebilirsiniz. mount komutunu çalıştırdığımızda ise /windowstan klasörümüzün dışarıdan bağlandığını görebilirsiniz. Küçük bir not olarak, Windows’ta ve macOS’te Docker sanal makinede çalıştığı için, Linux’taki gibi sunucudaki klasörler direkt olarak container’a bağlanamıyor. Docker’da çalışan ek protokol ile Linux’taki tecrübenin aynısı sağlanıyor fakat, hem sanal makine olması, hem de dosya sistemlerindeki farklar sebebi ile paylaşılan klasörlerde yoğun işlem olduğu zaman bir performans kaybı yaşanabilir. 

İkinci yöntem ise docker volume komutlarını kullanmak. Bu sayede bu klasörlerin yönetimini Docker’a bırakıyoruz ve daha önce belirttiğimiz gibi eklentileri kullanabiliyoruz. Aşağıdaki örnekte görebileceğiniz üzere docker volume create dosyalar komutu ile bir volume oluşturduk. Daha sonra ise oluşturduğumuz bu volume tekrar -v parametresi ile /data bir ubuntu:20:04 container’ına bağladık. İçinde seq komutu merhaba.txt ile 1 2 3 4 5 yazdırdık. Container’dan çıkınca ise başka bir container’a alpine baz imajı ile bağladık ve bu dosyanın içeriğini görüntüleyebildik. Son olarak ise tekrar bir alpine imajı içine bu sefer -v parametresinin sonuna :ro parametresi ekleyerek dosyaların yazılmasını engelledik. Son olarak ise docker volume ls komutu ile oluşturduğumuz dosyalar adındaki volume’u gördük. Eğer isterseniz docker volume inspect dosyalar yazarak daha bu volume hakkında daha detaylı bilgilere ulaşabilirsiniz. 

Özet

Bu dersimizde Docker container’larında volumeleri kullanarak verileri, yani dosyaları nasıl kalıcı yapacağımızı ve bu dosyaları, klasörleri birden fazla container arasında nasıl paylaşabileceğimizi öğrendik. Volume’ler sayesinde verilerin kalıcı olması ile, veritabanı, birden fazla container’ın aynı veriyi kullanıp çalışması, sunucudan container’a kolayca veri aktarımı mümkün oldu. Eğer container’ınız içinde veri tutmayan bir mikroservis ise muhtemelen volume’lere ihtiyacınız olmayacaktır, fakat nasıl kullanılacağını bilmekte kesinlikle fayda var.

Bir sonraki dersimizde Docker Compose ile Birden Fazla Container Yönetimi konusunu anlatmaya çalışacağız.

Tüm Docker ve Kubernetes Eğitimi için tıklayınız!

1

Mustafa Akın

SRE Architect @Atlassian Opsgenie
PhD Öğrencisi @Bilkent Üniversitesi

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?