Volume backup va tiklash, tmpfs

~10 daq · Docker · Ma'lumotlarni saqlash

Muammodan boshlaylik

Volume konteyner o'chirilganda ma'lumotni saqlaydi. Lekin:

  • Server diski ishdan chiqdi — volume ham yo'q
  • Kimdir docker volume prune qildi
  • Bazani boshqa serverga ko'chirish kerak

Volume — backup emas. Backup — alohida vazifa.


Fayllar uchun: vaqtinchalik konteyner bilan arxiv

docker run --rm \
  -v yuklamalar:/manba:ro \
  -v "$(pwd)":/backup \
  alpine \
  tar czf /backup/yuklamalar-$(date +%F).tar.gz -C /manba .

Volume va joriy papkani ulagan vaqtinchalik konteyner arxiv yasaydi. Natija — yuklamalar-2026-11-06.tar.gz kompyuteringizda.

Tiklash

docker volume create yuklamalar-yangi
docker run --rm \
  -v yuklamalar-yangi:/manzil \
  -v "$(pwd)":/backup:ro \
  alpine \
  tar xzf /backup/yuklamalar-2026-11-06.tar.gz -C /manzil

Bazalar: dump

[!WARNING] Ishlab turgan baza papkasini tar bilan arxivlash — buzilgan backup berishi mumkin: fayllar nusxalanayotgan paytda baza ularni yozmoqda. Bazalar uchun — o'z vositasi.

MySQL

docker exec baza mysqldump -uroot -proot123 \
  --single-transaction --routines --triggers --events dokon \
  | gzip > dokon-$(date +%F).sql.gz

gunzip < dokon-2026-11-06.sql.gz | docker exec -i baza mysql -uroot -proot123 dokon

docker exec -i — stdin ni konteynerga uzatadi. -t qo'shmang — u quvurni buzadi. Batafsil — MySQL kursi, 52-dars.

PostgreSQL

docker exec pg pg_dump -U postgres -Fc dokon > dokon.dump
docker exec -i pg pg_restore -U postgres -d dokon --clean < dokon.dump

Redis

docker exec kesh redis-cli SAVE
docker cp kesh:/data/dump.rdb ./redis.rdb

Avtomatlashtirish

#!/bin/sh
set -e
SANA=$(date +%F)
docker exec baza mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" --single-transaction --routines --events dokon \
  | gzip > "/backup/dokon-$SANA.sql.gz"
find /backup -name "dokon-*.sql.gz" -mtime +14 -delete

Cron bilan har kecha. Nusxani boshqa joyga ham (3-2-1 qoidasi) va tiklashni sinab ko'ring.


tmpfs — faqat xotirada

docker run -d --tmpfs /app/tmp:size=64m ilova
  • Fayllar faqat RAM da, diskka tushmaydi
  • Konteyner to'xtasa — yo'qoladi
  • size — chegara

Ishlatilishi:

  • Faqat o'qiladigan konteyner (--read-only, 39-dars) uchun yoziladigan papka
  • Testlarda tez baza: --tmpfs /var/lib/postgresql/data

Nima uchun shunday?

Oddiy fayllar mustaqil — ularni istalgan vaqtda nusxalash xavfsiz. Baza fayllari esa bir-biriga bog'liq: ma'lumot, indekslar, tranzaksiya jurnali bir lahzada izchil bo'lishi kerak. mysqldump bazaning o'zidan izchil "surat" so'raydi va uni mustaqil SQL ga aylantiradi — istalgan serverga tiklanadi.


Xulosa

Eslab qoling:

  • Volume — backup emas
  • Fayllar: alpine + tar czf / tar xzf
  • Bazalar: mysqldump, pg_dump, redis-cli SAVE; exec -i (-t siz)
  • Avtomatlashtiring, boshqa joyga nusxalang, tiklashni sinang
  • --tmpfs — faqat RAM

Keyingi dars

22-dars: Ma'lumotlar bazasi konteynerda — MySQL, PostgreSQL, init skriptlar