Ana Sayfa / Dokümanlar / Docker Volume Yönetimi
KTD-010

Docker Volume Yönetimi

Bu dokümanda Docker Volume mantığını, bind mount ve named volume farkını, Docker Compose içinde volume tanımlamayı, volume listeleme ve temizleme işlemlerini gerçek VPS projemiz üzerinden öğreneceğiz.

Docker Volume Bind Mount Named Volume Compose Backup
Okuma Süresi 30-40 dakika
Bölüm Sayısı 15 bölüm
Son Güncelleme Temmuz 2026
Seviye Başlangıç - Orta

Docker Volume Nedir?

Docker Volume, container içindeki verilerin container silinse bile kaybolmaması için kullanılan kalıcı veri saklama yöntemidir. Container'lar geçici yapılardır; önemli veriler container içinde değil, volume veya host klasörlerinde tutulmalıdır.

📌 Gerçek Proje Notu

Bizim projemizde web sitesi dosyaları /opt/docker/kemaltokmak/html klasöründe, Nginx Proxy Manager verileri ise /opt/docker/nginx-proxy-manager/data ve letsencrypt klasörlerinde tutulur.

Neden Volume Kullanılır?

Container yeniden oluşturulduğunda veya güncellendiğinde içindeki geçici veriler kaybolabilir. Volume kullanarak önemli dosyaları host sistemde saklarız.

  • Veri kalıcılığı sağlar.
  • Container güncellemelerinde dosyalar korunur.
  • Yedekleme işlemlerini kolaylaştırır.
  • Konfigürasyon dosyaları düzenli şekilde saklanır.
  • Birden fazla container aynı veriye erişebilir.

Bind Mount ve Named Volume Farkı

Docker'da veri saklamak için en sık kullanılan iki yöntem bind mount ve named volume yapılarıdır.

Bind Mount

Host üzerindeki belirli bir klasörü container içine bağlar. Bizim web sitesi dosyalarında kullandığımız yöntem budur.

Named Volume

Docker tarafından yönetilen, ismi olan volume yapısıdır. Verinin fiziksel konumu Docker tarafından yönetilir.

Gerçek Proje Klasör Yapısı

Biz Docker projelerini /opt/docker altında düzenli şekilde tutuyoruz.

/opt/docker
├── kemaltokmak
│   ├── compose.yaml
│   └── html/
│       ├── index.html
│       ├── css/
│       ├── js/
│       ├── images/
│       └── docs/
└── nginx-proxy-manager
    ├── compose.yaml
    ├── data/
    └── letsencrypt/

Bu yapı sayesinde hem site dosyaları hem de proxy manager verileri kolayca yedeklenebilir.

HTML Klasörünü Container'a Bağlama

Web sitesi container'ında host üzerindeki html klasörünü Nginx'in yayın dizinine bağlıyoruz.

./html:/usr/share/nginx/html:ro

Burada ./html host klasörüdür, /usr/share/nginx/html ise container içindeki Nginx yayın dizinidir.

💡 İpucu

Sondaki :ro ifadesi container'ın bu klasörü sadece okuma yetkisiyle kullanmasını sağlar.

Nginx Proxy Manager Data ve SSL Klasörleri

Nginx Proxy Manager ayarları ve SSL sertifikaları container içinde bırakılmamalıdır. Bu yüzden host klasörlerine bağlanır.

./data:/data
./letsencrypt:/etc/letsencrypt

data klasörü NPM ayarlarını, letsencrypt klasörü ise SSL sertifikalarını saklar.

Docker Compose İçinde Volume Tanımlama

Compose dosyasında volume tanımı volumes alanı altında yapılır.

services:
  web:
    image: nginx:alpine
    container_name: kemaltokmak
    volumes:
      - ./html:/usr/share/nginx/html:ro

Nginx Proxy Manager için örnek:

services:
  nginx-proxy-manager:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy-manager
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Named Volume Oluşturma

Docker tarafından yönetilen bir named volume oluşturmak için aşağıdaki komut kullanılır.

docker volume create site-data

Named volume bir compose dosyasında şu şekilde kullanılabilir:

services:
  app:
    image: nginx:alpine
    volumes:
      - site-data:/usr/share/nginx/html

volumes:
  site-data:

Volume Listeleme

Docker üzerinde oluşturulmuş volume'ları listelemek için:

docker volume ls

Bu komut named volume'ları listeler. Bind mount olarak kullanılan host klasörleri burada her zaman ayrı volume gibi görünmeyebilir.

Volume Detaylarını İnceleme

Bir named volume hakkında detaylı bilgi almak için docker volume inspect komutu kullanılır.

docker volume inspect site-data

Çıktıda volume adı, driver bilgisi ve sistem üzerindeki mount yolu görülebilir.

Veri Kalıcılığını Test Etme

Volume kullanımının en önemli amacı, container silinse bile verinin korunmasıdır. Bunu test etmek için container yeniden oluşturulabilir.

docker compose down
docker compose up -d

Eğer site dosyaları veya NPM ayarları korunuyorsa volume yapısı doğru çalışıyor demektir.

Kullanılmayan Volume'ları Temizleme

Kullanılmayan volume'lar zamanla disk alanı kaplayabilir. Temizlemek için:

docker volume prune
⚠️ Dikkat

Bu komut kullanılmayan volume'ları siler. İçinde önemli veri olabilecek volume'ları silmeden önce mutlaka kontrol edin.

Volume ve Backup Mantığı

Volume veya bind mount kullanılan klasörler düzenli olarak yedeklenmelidir. Bizim projede yedeklenmesi gereken ana klasör:

/opt/docker

Tüm Docker projelerini yedeklemek için:

cd /opt
tar -czvf docker-full-backup.tar.gz docker

Bu işlem web sitesi dosyalarını, NPM data klasörünü ve SSL sertifikalarını da kapsar.

Sık Yapılan Hatalar

Docker volume kullanırken yapılan küçük hatalar container'ın çalışmamasına veya verinin beklenen yerde oluşmamasına neden olabilir.

⚠️ Yaygın Hatalar
  • Host klasör yolunu yanlış yazmak.
  • Volume satırında boşluk veya girinti hatası yapmak.
  • :ro kullanıldığı halde container'ın yazma yapmasını beklemek.
  • Silinen container ile verinin de silindiğini düşünmek.
  • Yedek almadan docker volume prune çalıştırmak.

Volume Satırlarını Kontrol Etme

docker inspect kemaltokmak
docker inspect nginx-proxy-manager

Bu Dokümanda Ne Öğrendik?

Bu dokümanda Docker Volume mantığını, bind mount ve named volume farkını, Docker Compose içinde volume tanımlamayı, volume listeleme ve temizleme işlemlerini ve gerçek projemizde verilerin nasıl kalıcı tutulduğunu öğrendik.

✅ Özet
  • Docker Volume kavramını öğrendik.
  • Bind mount ve named volume farkını inceledik.
  • Web sitesi dosyalarını container'a bağladık.
  • NPM data ve letsencrypt klasörlerinin önemini gördük.
  • docker volume ls ve inspect komutlarını öğrendik.
  • Kullanılmayan volume'ları temizlemeyi gördük.
  • Volume ve backup ilişkisini öğrendik.
Sonraki Doküman KTD-011 — Docker Network Yapısı