GoDasturchi
Volumes & Persistence

Volumes & Persistence

Volume va ma'lumotni saqlab qolish

Konteynerning muhim xususiyati bor: u o'chirilganda, ICHIDAGI barcha ma'lumot ham yo'qoladi — xuddi doskaga bo'r bilan yozib, keyin doskani artgandek. Bu ilovaning o'zi uchun yaxshi (har safar "toza holatda" boshlanadi), lekin ma'lumotlar bazasi uchun falokat: har safar konteyner qayta ishga tushganda barcha foydalanuvchi ma'lumoti yo'qolib qolsa bo'lmaydi!

Volume — bu muammoni hal qiladi: u konteyner ICHIDAGI emas, konteynerdan tashqarida, host kompyuterning o'zida turadigan maxsus saqlash joyi. Buni bankdagi seyfga o'xshating: ofis binosi (konteyner) yiqitilib, qaytadan qurilishi mumkin, lekin seyf (volume) va undagi qimmatliklar (ma'lumot) alohida, xavfsiz joyda saqlanadi.

docker-compose.yml
services:
  db:
    image: postgres:16
    volumes:
      - db-data:/var/lib/postgresql/data # named volume
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql # bind mount

volumes:
  db-data:

Bu yerda ikki turdagi volume ko'rsatilgan: named volume (db-data:/var/lib/postgresql/data) — Docker o'zi boshqaradigan, nomlangan saqlash joyi; konteyner o'chirilib, qaytadan yaratilsa ham, db-data da saqlangan ma'lumot saqlanib qoladi. Bind mount (./init.sql:/docker-entrypoint-initdb.d/init.sql) esa host kompyuterdagi aniq bir faylni yoki papkani konteyner ichiga to'g'ridan-to'g'ri "ko'rsatib qo'yadi" — ikkalasi bir xil faylni ko'radi, biror tomonda o'zgarish ikkalasida ham darhol seziladi.

terminal
$ docker volume ls              # barcha volume'larni ko'rish
$ docker volume rm db-data       # volume'ni O'CHIRISH (ma'lumot ham yo'qoladi!)

Key Takeaway

Key Takeaway:

Volume konteynerdan tashqarida, host'da ma'lumotni saqlaydi — konteyner o'chirilib qaytadan yaratilsa ham, volume'dagi ma'lumot (masalan baza ma'lumotlari) saqlanib qoladi.

NEXT UP

Container Debugging

Volumes & Persistence

Volume va ma'lumotni saqlab qolish

Konteynerning muhim xususiyati bor: u o'chirilganda, ICHIDAGI barcha ma'lumot ham yo'qoladi — xuddi doskaga bo'r bilan yozib, keyin doskani artgandek. Bu ilovaning o'zi uchun yaxshi (har safar "toza holatda" boshlanadi), lekin ma'lumotlar bazasi uchun falokat: har safar konteyner qayta ishga tushganda barcha foydalanuvchi ma'lumoti yo'qolib qolsa bo'lmaydi!

Volume — bu muammoni hal qiladi: u konteyner ICHIDAGI emas, konteynerdan tashqarida, host kompyuterning o'zida turadigan maxsus saqlash joyi. Buni bankdagi seyfga o'xshating: ofis binosi (konteyner) yiqitilib, qaytadan qurilishi mumkin, lekin seyf (volume) va undagi qimmatliklar (ma'lumot) alohida, xavfsiz joyda saqlanadi.

docker-compose.yml
services:
  db:
    image: postgres:16
    volumes:
      - db-data:/var/lib/postgresql/data # named volume
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql # bind mount

volumes:
  db-data:

Bu yerda ikki turdagi volume ko'rsatilgan: named volume (db-data:/var/lib/postgresql/data) — Docker o'zi boshqaradigan, nomlangan saqlash joyi; konteyner o'chirilib, qaytadan yaratilsa ham, db-data da saqlangan ma'lumot saqlanib qoladi. Bind mount (./init.sql:/docker-entrypoint-initdb.d/init.sql) esa host kompyuterdagi aniq bir faylni yoki papkani konteyner ichiga to'g'ridan-to'g'ri "ko'rsatib qo'yadi" — ikkalasi bir xil faylni ko'radi, biror tomonda o'zgarish ikkalasida ham darhol seziladi.

terminal
$ docker volume ls              # barcha volume'larni ko'rish
$ docker volume rm db-data       # volume'ni O'CHIRISH (ma'lumot ham yo'qoladi!)

Key Takeaway

Key Takeaway:

Volume konteynerdan tashqarida, host'da ma'lumotni saqlaydi — konteyner o'chirilib qaytadan yaratilsa ham, volume'dagi ma'lumot (masalan baza ma'lumotlari) saqlanib qoladi.

NEXT UP

Container Debugging