CodeBlanks Logo Icon CodeBlanks

Meydan okuma - Volume

Kalıcı veri için volume ile bir veritabanı çalıştırırsın.

Meydan okuma: volume ile güvenli güncelleme

Bir veritabanı image'ını yeni sürüme geçirmek için container silinir ve aynı volume'le yeniden oluşturulur. Ama önce yedek alınır; bir şey ters giderse yedekten dönülür:

# 1. yedek
docker run --rm -v pgdata:/veri:ro -v "$PWD":/yedek alpine tar czf /yedek/pgdata.tar.gz -C /veri .
# 2. değiştir
docker rm -f db
docker run -d --name db -e POSTGRES_PASSWORD=gizli -v pgdata:/var/lib/postgresql/data postgres:16.4
# 3. kontrol
docker logs --tail 5 db

Uygulama Yedekle

alpine ile, iş bitince silinen bir container'da pgdata'yı /veri'ye salt okunur ve mevcut klasörü ("$PWD") /yedek'e bağlayıp tar czf /yedek/pgdata.tar.gz -C /veri . çalıştıran komutu yaz; ardından oluşan dosyayı ls -lh pgdata.tar.gz ile göster.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
docker run --rm -v pgdata:/veri:ro -v "$PWD":/yedek alpine tar czf /yedek/pgdata.tar.gz -C /veri .
ls -lh pgdata.tar.gz

Beklenen çıktı

-rw-r--r-- 1 root root 6.1M Nov  3 11:42 pgdata.tar.gz

Uygulama Sürümü yükselt

Üç komut yaz: db container'ını zorla sil; postgres:16.4'ten db adlı container'ı arka planda POSTGRES_PASSWORD=gizli ve pgdata volume'ü /var/lib/postgresql/data'ya bağlı olarak başlat; son 5 log satırını göster.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
docker rm -f db
docker run -d --name db -e POSTGRES_PASSWORD=gizli -v pgdata:/var/lib/postgresql/data postgres:16.4
docker logs --tail 5 db

Beklenen çıktı

db
8f90a1b2c3d4
PostgreSQL Database directory appears to contain a database; Skipping initialization
LOG:  database system is ready to accept connections

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Yeni container aynı pgdata volume'ünü bağladığında POSTGRES_PASSWORD değiştirilirse ne olur?

  • Hiçbir şey; değişken yalnızca boş veri dizininde ilk kurulumda kullanılır Doğru cevap
  • Parola güncellenir
  • Veriler silinir
  • Container başlamaz

Açıklama: Mevcut veritabanında parola SQL ile (ALTER USER) değiştirilir.

2 Yedeği volume'e geri aç.

Soru
docker run --rm -v pgdata:/veri -v "$PWD":/yedek alpine tar ____ /yedek/pgdata.tar.gz -C /veri
Cevap
docker run --rm -v pgdata:/veri -v "$PWD":/yedek alpine tar xzf /yedek/pgdata.tar.gz -C /veri

Açıklama: x çıkarır (extract), c oluşturur (create).

3 Eşleştir.

Kavram Anlamı
tar czf Yedek al
tar xzf Geri yükle
docker rm -f db Eski container'ı kaldır
postgres:16.4 Yeni sürüm

Başlangıç bölümündeki tüm dersler