Docker Volumes

Kalıcı veri depolama ve volume yönetimi

Volume Türleri

TürAçıklamaKullanım
Named VolumeDocker tarafından yönetilenProduction veriler
Bind MountHost dizini bağlamaDevelopment, config
Anonymous Volumeİsimsiz geçici volumeGeçici cache
tmpfsBellek içi (RAM)Hassas veriler

Named Volume

# Volume oluştur
docker volume create mydata

# Volume listele
docker volume ls

# Volume detayları
docker volume inspect mydata

# Volume kullan
docker run -d -v mydata:/var/lib/mysql mysql

# Volume sil
docker volume rm mydata

# Kullanılmayan volume'ları temizle
docker volume prune

Bind Mount

# Mutlak yol ile
docker run -v /home/user/app:/var/www/html nginx

# Göreceli yol (docker compose)
services:
  app:
    volumes:
      - ./src:/var/www/html

# Read-only
docker run -v /config:/etc/app:ro myapp

Compose'da Volume Tanımlama

version: '3.8'

services:
  mysql:
    image: mysql:8.0
    volumes:
      # Named volume
      - mysql_data:/var/lib/mysql
      # Bind mount
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
      # Anonymous volume
      - /var/lib/mysql/tmp

volumes:
  mysql_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /data/mysql

Volume Yedekleme

# Yedekleme
docker run --rm \
  -v mysql_data:/source:ro \
  -v $(pwd):/backup \
  alpine tar cvf /backup/mysql_backup.tar /source

# Geri yükleme
docker run --rm \
  -v mysql_data:/target \
  -v $(pwd):/backup \
  alpine sh -c "cd /target && tar xvf /backup/mysql_backup.tar --strip 1"

Volume Driver'lar

# NFS volume
docker volume create \
  --driver local \
  --opt type=nfs \
  --opt o=addr=192.168.1.100,rw \
  --opt device=:/shared \
  nfs_volume