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.
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.
$ 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