Docker Depolama Nasıl Çalışır: Hacimler ve Bağlama Montajları
Giriş
Bu eğitimde, Docker depolamanın nasıl çalıştığını ve Docker Volumes ve Bind Mounts kullanarak verilerin nasıl kalıcı hale getirileceğini öğreniyorsunuz. Ayrıca, bu yaklaşımlar arasındaki temel farkları ve her birini üretimde ne zaman kullanmanız gerektiğini anlıyorsunuz. Bu, veri kaybını önlemenize ve güvenilir konteynerleştirilmiş sistemler tasarlamanıza yardımcı olur.
Ön Koşullar
- Hedef kitle: Başlangıç seviyesindeki sistem yöneticileri
- Tahmini süre: ~30 dakika
- İşletim sistemi: Ubuntu 22.04+, Debian 12+, CentOS Stream veya Docker Desktop ile macOS gibi Docker desteği olan herhangi bir işletim sistemi
- Yazılım: Docker 24.0.0 veya daha yeni sürüm
- İzinler: Docker'a erişimi olan veya sudo ayrıcalıklarına sahip kullanıcı
- Donanım: En az 2 GB RAM ve 10 GB boş disk alanı
- Ağ: Konteyner görüntülerini çekmek için internet erişimi
- Varsayılan bilgi: Temel komut satırı kullanımı ve konteynerlerin anlaşılması
Adım 1: Docker Depolamanın Nasıl Çalıştığını Anlamak
Docker konteynerleri katmanlı bir dosya sistemi kullanır. Her konteynerin, salt okunur görüntü katmanlarının üzerinde yazılabilir bir katmanı vardır.
Bir konteyner veri yazdığında ne olur
- Docker, görüntü katmanlarını salt okunur olarak depolar
- Bir konteyner başlattığınızda, Docker yazılabilir bir katman ekler
- Herhangi bir dosya değişikliği yalnızca bu yazılabilir katmanda gerçekleşir
Sonuç
Bir konteyneri sildiğinizde, yazılabilir katmandaki tüm veriler kaybolur. Bu, konteyner depolamanın varsayılan olarak geçici olduğu anlamına gelir.
Bu davranış, durumsuz uygulamalar için faydalıdır ancak veritabanları veya kalıcı hizmetler için değildir.
Adım 2: Docker Volumes Oluşturma ve Kullanma
Docker Volumes, Docker tarafından oluşturulan ve sürdürülen yönetilen depolama konumlarıdır.
Bir hacim oluşturun
Aşağıdaki komutu çalıştırın:
docker volume create my_volume
Hacim adının döndüğünü görmelisiniz.
Bir konteynerde bir hacim kullanın
Aşağıdaki komutu çalıştırın:
docker run -d -v my_volume:/app/data --name volume_test busybox
Docker, hacmi konteynerin içinde /app/data konumuna monte eder.
Sonuç
/app/data konumuna yazılan veriler, konteyner kaldırılmış olsa bile kalıcıdır.
Hacimlerin temel özellikleri
- Docker tarafından yönetilir
/var/lib/docker/volumes/gibi Docker iç dizinlerinde depolanır- Yedeklemesi ve taşınması kolaydır
- Host dosya sistemi yapısından izole edilmiştir
Veritabanları ve üretim iş yükleri için hacimleri kullanın.
Adım 3: Bind Mounts Oluşturma ve Kullanma
Bind mounts, host üzerindeki belirli bir dizini konteyner içindeki bir dizine bağlar.
Bir bind mount kullanın
Aşağıdaki komutu çalıştırın:
docker run -d -v /home/<YOUR_USERNAME>/data:/app/data --name bind_test busybox
Sonuç
Konteyner, host dizinine doğrudan erişir. Host dizinindeki herhangi bir değişiklik, konteyner içinde hemen görünür.
Bind mounts'un temel özellikleri
- Host dosya sistemi yollarına bağlıdır
- Hosttan doğrudan dosya düzenlemeye izin verir
- Docker tarafından yönetilen bir izolasyon yoktur
- Daha esnek ancak daha az taşınabilir
Bind mounts, host ve konteyner arasında değişiklikleri hemen yansıtır.
Adım 4: Volumes ve Bind Mounts Karşılaştırması
Farkları anlamak, doğru seçeneği seçmenize yardımcı olur.
Docker Volumes
- Docker tarafından yönetilir
- Ortamlar arasında taşınabilir
- Üretim kullanımı için daha güvenlidir
- Yedeklemesi daha kolaydır
- Host dosya sisteminden soyutlanmıştır
Bind Mounts
- Host tarafından yönetilir
- Belirli dosya sistemi yollarına bağlıdır
- Geliştirme için kullanışlıdır
- Doğrudan dosya erişimi sağlar
- Yanlış yapılandırılırsa daha az güvenlidir
Adım 5: Üretimde Volumes ve Bind Mounts Arasında Seçim Yapma
Aşağıdaki yönergeleri kullanın.
Docker Volumes ne zaman kullanılmalı
- MySQL veya PostgreSQL gibi veritabanları çalıştırırken
- Kalıcı olması gereken uygulama verilerini depolarken
- Üretim hizmetlerini dağıtırken
- Sunucular arasında taşınabilirliğe ihtiyaç duyarken
Bind Mounts ne zaman kullanılmalı
- Yerel geliştirme ortamları
- Kod veya yapılandırma dosyalarını doğrudan düzenleme
- Konteyner davranışını hata ayıklama
- Geçici veya test kurulumları
Önemli: Yanlış yapılandırılırsa bind mounts, hassas host dosyalarını konteynerlere açabilir. Yolları ve izinleri her zaman doğrulayın.
Doğrulama ve Test
Bir hacim ile bir test konteyneri oluşturun:
docker run -it -v my_volume:/data --name playground busybox
Konteyner içinde bir dosya oluşturun:
echo test > /data/file.txt
Konteynerden çıkın ve kaldırın:
docker rm -f playground
Aynı hacimle yeni bir konteyner başlatın:
docker run -it -v my_volume:/data --name playground busybox
Dosyayı kontrol edin:
cat /data/file.txt
Beklenen sonuç: Dosya hala mevcut, veri kalıcılığını doğruluyor.
Değişiklikleri Geri Alma
Kaynakları temizlemek için aşağıdaki komutları çalıştırın:
docker rm -f playground volume_test bind_test
docker volume rm my_volume
docker system prune -f
Önemli: Hacimleri kaldırmak, depolanan tüm verileri kalıcı olarak siler.
Sorun Giderme
- Sorun: Veri, konteyner yeniden başlatıldıktan sonra kayboluyor
Neden: Hacim veya bind mount kullanılmadı
Çözüm: Hacimler veya bind mounts kullanarak kalıcı depolama ekleyin - Sorun: İzin reddedildi hataları
Neden: Host dizini izinleri uyumsuz
Çözüm: İzinlerichmodveyachownkullanarak ayarlayın - Sorun: Hacim doğru şekilde monte edilmiyor
Neden: Yanlış yol veya sözdizimi
Çözüm: Montaj formatını ve yolları doğrulayın
Sonuç ve Sonraki Adımlar
Docker depolamanın nasıl çalıştığını ve verilerin hacimler ve bind mounts kullanarak nasıl kalıcı hale getirileceğini öğrendiniz. Ayrıca, her yaklaşımı üretimde ne zaman kullanmanız gerektiğini anladınız. Sonraki adımda, çoklu konteyner uygulamalarını yönetmek ve depolamayı daha yapılandırılmış bir şekilde tanımlamak için Docker Compose'u keşfedin.