Docker Volume Nedir? Nginx ile Kullanım Rehberi (2026)
Docker Volumes, konteyner (container) silindiğinde verilerin kaybolmasını önleyerek kalıcı depolama (persistent storage) sağlayan en güvenli mekanizmadır. Terminalde docker volume create <isim> komutu ile oluşturulur ve bir konteyner başlatılırken -v veya --mount parametreleriyle konteynerin içindeki bir dizine bağlanarak verilerin host makinede güvenle saklanmasını sağlar.
Docker konteynerleri doğası gereği ephemeral yani "geçici" bir yapıya sahiptir. Bir konteyner silindiğinde, içinde oluşturulan veya değiştirilen tüm dosyalar (veritabanı kayıtları, loglar, yapılandırmalar) kalıcı olarak yok olur. Verilerinizi korumanın ve konteynerler arasında paylaşmanın en etkili yolu Docker Volume kullanmaktır.
1. Docker Volume Neden Kullanılır?
Kalıcı veri depolamak (örneğin bir PostgreSQL veya MySQL veritabanı çalıştırırken) zorunludur. Docker Volume'ün sunduğu başlıca avantajlar şunlardır:
- Kalıcılık: Konteyner dursa, çökse veya silinse bile veriler host makinede (sunucuda) korunur.
- Paylaşım: Aynı Volume, birden fazla konteyner tarafından aynı anda okunabilir ve yazılabilir.
- Yedekleme Kolaylığı: Volume'ler Docker CLI üzerinden kolayca yedeklenebilir ve farklı sunuculara taşınabilir.
- Performans: Konteynerin kendi yazılabilir katmanına (writable layer) kıyasla Mac ve Windows ortamlarında çok daha yüksek performans sunar.
2. Nginx ile Docker Volume Uygulaması
Öncelikle kalıcılığın önemini anlamak için geçici bir Nginx konteyneri ayağa kaldıralım ve içine girip değişiklik yapalım.
Nginx İmajını İndirme ve Çalıştırma
docker pull nginx
docker run -d \
--name demoUygulama \
-p 8000:80 \
nginx
Tarayıcınızdan http://localhost:8000 adresine giderek Nginx varsayılan karşılama sayfasını görebilirsiniz.
Konteyner İçine Girip Dosyayı Değiştirme
Çalışan konteynerin terminaline bağlanarak index.html dosyasını değiştirelim:
docker exec -it demoUygulama /bin/bash
cd /usr/share/nginx/html
echo "Merhaba Docker!" > index.html
Eğer bu konteyneri silerseniz (docker rm -f demoUygulama), yazdığınız "Merhaba Docker!" metni sonsuza dek kaybolur. İşte bunu önlemek için Volume oluşturacağız.
3. Docker Volume Oluşturma ve Yönetimi
Sisteminizde yeni bir bağımsız volume oluşturmak için:
docker volume create volumeExample
Mevcut tüm Volume'leri listelemek veya gereksiz olanları silmek için:
docker volume ls
docker volume rm volumeExample
4. Konteynere Volume Bağlama (-v ve --mount)
Docker'da bir Volume'ü konteynere bağlamanın iki farklı yolu vardır.
Yöntem 1: --mount Parametresi (Önerilen)
Daha okunabilir ve modern olan bu yöntem, hata yapma payını azaltır:
docker run -d \
--name demoUygulama2 \
--mount source=volumeExample,target=/usr/share/nginx/html \
-p 8000:80 \
nginx
Yöntem 2: -v Parametresi (Klasik)
Eski sürümlerden beri kullanılan daha kısa yöntemdir:
docker run -d \
--name demoUygulama1 \
-v volumeExample:/usr/share/nginx/html \
-p 8000:80 \
nginx
demoUygulama1 konteynerini silseniz bile, volumeExample içindeki dosyalarınız güvendedir. Yeni bir konteyner oluşturup aynı volume'ü bağladığınızda verilerinize erişmeye devam edersiniz.
5. Dockerfile ve Docker Compose ile Kullanımı
Dockerfile İçinde Volume Tanımlama
Bir imaj inşa ederken, geliştiricilere "bu dizin kalıcı olmalı" mesajı vermek için VOLUME komutu kullanılır:
FROM openjdk:11-jdk
VOLUME ["/data"]
ENTRYPOINT ["java", "-jar", "app.jar"]
Docker Compose İçinde Volume (Bind Mount)
Geliştirme ortamlarında sıklıkla kaynak kodun anında konteynere yansıması için (Bind Mount) kullanılır. . işareti, docker-compose.yml dosyasının bulunduğu yerel dizini temsil eder.
version: '3'
services:
webserver:
image: nginx
ports:
- "8000:80"
volumes:
- .:/usr/share/nginx/html
6. Sonuç
Docker Volumes, veri sürekliliğini (persistence) sağlamak ve veritabanı gibi kritik sistemleri Dockerize ederken veri kaybını önlemek için vazgeçilmez bir mekanizmadır. Bu rehberde Nginx örneği üzerinden terminalde volume yönetimini ve Compose entegrasyonunu başarıyla tamamladık. Devops dünyasında sağlam adımlarla ilerlemek için pratik yapmaya devam edin!