Docker Volume Nedir?

Modern yazılım geliştirme süreçlerinde, Docker gibi konteyner teknolojileri büyük kolaylıklar sağlamakta. Ancak, konteynerler içinde çalışan uygulamaların verilerini yönetmek bazı zorlukları da beraberinde getiriyor. İşte bu noktada, Docker Volume devreye girer. Bu yazımda, Docker Volume’ün ne olduğunu, neden kullanıldığını, nasıl kullanılacağını ve temel özelliklerini, bol örnek kodlar eşliğinde ele alacağız.

Docker Volume Nedir ve Neden Kullanılır?

Docker Volume, Docker konteynerlerindeki veri yönetimi için kullanılan bir mekanizmadır. Konteynerlerin doğası gereği geçici olmaları, içerisindeki verilerin de kalıcı olmadığı anlamına gelir. Uygulamanızın veya veritabanınızın kalıcı verilere ihtiyacı varsa, Docker Volume kullanımı kaçınılmazdır. Volume’ler, konteynerler silinse dahi verilerin korunmasını sağlar ve farklı konteynerler arasında veri paylaşımı yapılabilmesine olanak tanır.

Volume’ler Cihazda Nerede Saklanır?

Docker Volume’ler, host makinede belirli bir dizinde saklanır. Bu dizin işletim sistemine göre değişiklik gösterir:

 Linux’ta:  Docker Volume’ler genellikle /var/lib/docker/volumes/ altında bulunur.

 Windows’ta:  Volume’ler genellikle C:\ProgramData\Docker\volumes\ altında bulunur.

Volume Komutları ve Kullanımları

Docker Volume’lerle çalışırken sık kullanılan bazı temel komutlar vardır. Bu komutlar, volume’leri yönetmek, bilgi almak ve volume’leri temizlemek için kullanılır. Aşağıda, bu komutların her birinin nasıl kullanılacağına dair örnekler bulunmaktadır:

 Oluşturma:  Yeni bir volume oluşturmak için kullanılır. Örneğin, my-vol adında bir volume oluşturalım:

Bu komut, my-vol adında bir Docker Volume oluşturur.

 Listeleme:  Sistemdeki mevcut volume’leri listelemek için kullanılır. Mevcut tüm volume’leri görmek için:

Bu, sistemdeki tüm Docker Volume’lerin bir listesini verir.

 Detay Görüntüleme:  Belirli bir volume hakkında detaylı bilgi almak için kullanılır. my-vol hakkında detayları görüntüleyelim:

Bu komut, volume hakkında JSON formatında detaylı bilgi sağlar, örneğin hangi konteyner tarafından kullanıldığı, volume’un hangi yolda saklandığı gibi.

 Silme:  Kullanılmayan bir volume’u silmek için kullanılır. my-vol volume’unu silmek isterseniz:

Bu komut my-vol adındaki volume’u siler.

Volume Oluşturma ve Konteynerlere Bağlama

Öncelikle, bir volume oluşturup, bu volume üzerinde veri saklayacak, ardından başka bir konteyner aracılığıyla bu verilere erişeceğiz. İşlem sırasında, volume ve konteynerlerin durumlarını gözlemleyeceğiz.

 1. Volume Oluşturma: 

İlk adım olarak, veri saklamak için bir Docker Volume oluşturacağız. Bu volume, konteynerlerimiz arasında paylaşılan ve kalıcı veri saklama alanı görevi görecek.

Bu komut, data-volume isminde bir volume oluşturur. Oluşturduğumuz volume’un durumunu docker volume ls komutu ile gözlemleyebiliriz.

 2. İlk Konteyneri Oluşturma ve Volume ile Bağlama 

Şimdi, data-volume volume’unu /app dizinine bağlayacak bir konteyner oluşturalım. Ancak, bu sefer konteyneri oluşturduktan sonra içerisine girecek ve dosyayı manuel olarak oluşturacağız.

Bu komut, container1 adında, data-volume volume’ünü /app dizinine bağlayan bir Ubuntu konteyneri başlatır. Komut, aynı zamanda konteynerin içine bir shell oturumu başlatır.

Konteynerin içindeyken, /app dizinine gidip hello.txt dosyasını oluşturalım:

exit komutu ile konteynerden çıkabiliriz. Bu adımlarla, data-volume içinde hello.txt adında bir dosya oluşturmuş olduk.

 3. Volume ve İlk Konteynerin Durumunu Gözlemleme 

Konteynerden çıktıktan sonra, volume içindeki dosyaları gözlemlemek için docker volume inspect data-volume komutunu kullanabiliriz. Ancak, bu komut direkt olarak volume içindeki dosyaları listelemez, volume hakkında detaylı bilgi verir. Dosyaları görmek için, volume’u bağlı olan bir konteyner içerisinden kontrol etmemiz gerekir.

 4. İkinci Konteyneri Oluşturma ve Volume ile Bağlama 

Şimdi, aynı volume’u başka bir konteynere bağlayıp, ilk konteyner tarafından oluşturulan dosyaya erişim sağlayacağız.

Bu komut, container2 adında yeni bir Ubuntu konteyneri başlatır ve data-volume volume’ünü /app dizinine bağlar.

Konteynerin içindeyken, hello.txt dosyasının içeriğini görüntüleyelim:

Bu komut, Hello World metnini ekrana yazdırır, bu da data-volume üzerindeki verinin başarıyla paylaşıldığını ve kalıcı olduğunu gösterir.

 5. İkinci Konteynerden Çıkış 

İşlemlerimizi tamamladıktan sonra exit komutu ile ikinci konteynerden çıkabiliriz. Bu adımlarla, Docker Volume’lerin nasıl kullanılacağını, verilerin nasıl kalıcı hale getirileceğini ve farklı konteynerler arasında nasıl paylaşılabileceğini detaylı bir şekilde incelemiş olduk.

Volume Bağlama Yöntemleri

Docker’da volume bağlama iki şekilde yapılabilir: Data Volume ve Bind Mounting.

 Data Volume:  Yukarıda gösterildiği gibi, Docker tarafından yönetilen ve konteynerlere bağlanabilen bir volume oluşturulur.

 Bind Mounting:  Host makinedeki bir dosya veya dizin doğrudan konteynere bağlanır. Bu yöntem, geliştirme aşamasında uygulama kodunu konteynere hızlı bir şekilde bağlamak için sıkça kullanılır.

–volume ile –mount Arasındaki Farklar

Docker’da veri saklama ve konteynerlere veri bağlama işlemleri için iki farklı opsiyon bulunmaktadır:

–volume (veya -v) ve –mount. Her iki yöntem de benzer işlevsellik sunsa da, aralarında bazı önemli farklar bulunmaktadır. Bu farkları anlamak, hangi durumda hangi yöntemin tercih edilmesi gerektiğine karar vermede yardımcı olur.

 Sözdizimi ve Esneklik 

–volume / -v: Daha eski ve daha basit bir sözdizimine sahiptir. Kullanımı kolaydır ancak –mount ile karşılaştırıldığında daha az esneklik sunar. –volume opsiyonu, volume adı, bağlama yolu ve (isteğe bağlı) izinlerden oluşan basit bir yapıya sahiptir.

Örneğin: -v volume_name:/path/in/container.

–mount: Daha yeni ve daha detaylı bir sözdizimi sunar. –mount flag’i, bağlama işlemlerinde daha fazla seçenek ve detay sağlar. Özellikle, yeni başlayanlar için biraz daha karmaşık olabilir, ancak ileri düzey kullanımlar için gereken esnekliği ve kontrolü sağlar.

Örneğin: –mount type=volume,source=volume_name,target=/path/in/container.

 Ayarlama ve Yapılandırma Seçenekleri 

–mount flag’i, type, source, target, readonly, volume-opt gibi birden fazla parametre ile kullanılabilir. Bu parametreler sayesinde, bağlama işleminin davranışını daha detaylı şekilde kontrol etmek mümkündür. Örneğin, bir volume’u salt okunur (readonly) olarak bağlamak veya volume için özel ayarlar (volume-opt) yapmak gibi.

–volume opsiyonu ise, bu tür detaylı yapılandırmaları doğrudan desteklemez. Ancak, basit kullanımlar için hızlı ve kolay bir çözüm sunar.

 Kullanım Senaryoları 

Geliştirme ve Test Ortamları: –volume opsiyonu, geliştirme ve test ortamlarında hızlı ve basit veri bağlama ihtiyaçları için uygun olabilir. Özellikle, host makinedeki bir dizini konteynere bağlamak istediğinizde, -v opsiyonu kolay bir kullanım sunar.

Üretim Ortamları ve İleri Düzey Yapılandırmalar: –mount opsiyonu, üretim ortamları veya daha karmaşık yapılandırmalar gerektiğinde tercih edilmelidir. Örneğin, bir volume’u salt okunur olarak bağlamak veya belirli volume seçeneklerini kullanmak istiyorsanız, –mount daha uygun bir seçenektir.

Sonuç olarak, –volume ve –mount arasındaki seçim, ihtiyaç duyulan esneklik ve yapılandırma detaylarına bağlı olarak değişiklik gösterir. Basit ve hızlı bir çözüm arıyorsanız –volume kullanabilirsiniz. Daha detaylı kontrol ve yapılandırma ihtiyacınız varsa, –mount opsiyonu daha uygun olacaktır.

Dockerfile ile Volume Kullanımı

Dockerfile kullanarak Docker imajları oluştururken, imajınıza volume’ler ekleyerek konteynerlerinizin kalıcı veri saklamasını ve veri paylaşımını kolaylaştırabilirsiniz. VOLUME komutu, Dockerfile içerisinde volume tanımlamak için kullanılır. Dockerfile içinde volume kullanımına dair çeşitli örneklerle konuyu detaylı bir şekilde ele alacağız.

 Basit Volume Tanımı 

Bir Dockerfile içerisinde, tek bir volume tanımlamak için aşağıdaki gibi VOLUME komutunu kullanabilirsiniz:

Bu Dockerfile, /data dizininde bir volume oluşturur. Konteyner çalıştırıldığında, Docker bu dizini bir volume ile bağlar, böylece bu dizinde yapılan değişiklikler kalıcı hale gelir.

 Çoklu Volume Tanımlama 

Birden fazla dizini volume olarak tanımlamak istiyorsanız, VOLUME komutunu aşağıdaki gibi kullanabilirsiniz:

Bu örnekte, /data ve /var/log dizinleri volume olarak tanımlanmıştır. Bu, konteynerinizin hem veri saklaması hem de log kayıtlarını kalıcı olarak tutması gerektiğinde kullanışlıdır.

 Volume Kullanımı ile Uygulama Örneği 

Bir uygulamanız var ve bu uygulamanın bazı yapılandırma dosyalarını, çalışma zamanı verilerini veya logları kalıcı olarak saklamak istiyorsunuz. Aşağıdaki Dockerfile, bir web uygulaması için basit bir yapılandırma örneğidir:

Bu Dockerfile, /app/data dizinini bir volume olarak tanımlar. Uygulama çalışırken bu dizine yazılan veriler (örneğin, kullanıcı yüklemeleri, veritabanı dosyaları vb.) konteynerin ömrü boyunca kalıcı olur.

Docker Compose ile Volume Kullanımı

Dockerfile ile tanımladığınız volume’leri, docker-compose.yml dosyası üzerinden daha detaylı yönetebilirsiniz. Örneğin:

Bu docker-compose.yml dosyası, Dockerfile ile oluşturulan imajı kullanarak bir web servisi başlatır ve data-volume adında tanımlı bir volume’u /app/data dizinine bağlar. docker-compose kullanımı, volume yönetimini ve konteyner yapılandırmasını daha okunabilir ve yönetilebilir hale getirir.

Umarım “Docker Volume Nedir?” başlıklı yazım sizin için faydalı olmuştur.

Şu yazılar da ilginizi çekebilir.

Docker Container Nedir? Docker Container Komutları

Yeni bir yazımda görüşmek üzere.

Happy coding!

Yorum Yazın