Data di dalam Docker volume itu gampang banget ilang kalau kamu gak punya backup, apalagi kalau kamu asal jalanin docker system prune atau docker volume rm tanpa mikir dua kali. Beda sama container yang bisa dibuat ulang dari image kapan aja, data di volume itu unik, sekali ilang ya ilang beneran.
Di artikel ini kita bahas cara backup Docker volume dan restore-nya pakai cara paling simpel: manfaatin container sementara dan tar. Gak perlu install tools tambahan apapun.
Kenapa Docker Volume Perlu Dibackup Terpisah
Banyak yang salah kaprah, ngira backup image atau backup docker-compose.yml udah cukup. Padahal file konfigurasi itu cuma “resep”, sedangkan data asli (database, upload user, config aplikasi yang di-generate runtime) itu tersimpan di volume yang lokasinya biasanya di /var/lib/docker/volumes/. Kalau server kena masalah atau kamu migrasi ke VPS baru, tanpa backup volume, semua data itu bakal ketinggalan meskipun docker-compose.yml-nya kamu bawa.
Buat referensi lebih lengkap soal cara kerja volume, kamu bisa baca dokumentasi resmi Docker soal volumes.
Cek Dulu Volume yang Ada
Sebelum backup, lihat dulu volume apa aja yang ada di server kamu. Ini penting biar kamu gak salah backup volume yang bukan itu, apalagi kalau server kamu udah jalanin banyak container sekaligus dengan nama volume yang mirip-mirip.
docker volume ls
Catat nama volume yang mau kamu backup, misalnya mydata.
1. Backup Volume ke File Tar
Cara paling gampang backup Docker volume itu pakai container Alpine sementara buat compress isi volume jadi satu file tar. Kita pakai Alpine karena image-nya kecil banget (cuma beberapa MB), jadi prosesnya cepat dan gak makan banyak resource server, cocok dijalanin bahkan di VPS spek rendah.
docker run --rm
-v mydata:/source:ro
-v $(pwd)/backups:/backup
alpine tar czf /backup/mydata-$(date +%Y%m%d).tar.gz -C /source .
Penjelasan command-nya: -v mydata:/source:ro mount volume yang mau dibackup dalam mode read-only (biar gak sengaja keubah pas proses backup), -v $(pwd)/backups:/backup mount folder lokal buat nyimpen hasil backup-nya, dan tar czf compress semua isi volume jadi satu file .tar.gz dengan nama yang otomatis include tanggal.
Kalau volume-nya dipakai database (MySQL, PostgreSQL, dll), sebaiknya stop dulu container yang pakai volume itu sebelum backup, biar datanya konsisten dan gak ada proses tulis yang lagi jalan pas di-backup:
docker stop nama_container
# jalanin backup di sini
docker start nama_container
2. Restore Volume dari File Backup
Kalau kamu perlu restore (misal abis migrasi VPS atau data kesenggol rusak), pertama bikin volume baru dulu. Proses restore ini bisa dilakuin di server yang sama atau server baru sama sekali, selama kamu udah pindahin file backup tar.gz-nya ke server tujuan lebih dulu (pakai scp, rsync, atau cara transfer file lain).
docker volume create mydata
Terus extract isi backup ke volume itu, prosesnya cuma butuh command sekali jalan aja:
docker run --rm
-v mydata:/target
-v $(pwd)/backups:/backup
alpine tar xzf /backup/mydata-20260710.tar.gz -C /target
Ganti nama file tar.gz-nya sesuai backup yang mau kamu restore. Setelah selesai, tinggal jalanin container yang pakai volume itu seperti biasa, datanya bakal langsung kebaca tanpa perlu konfigurasi tambahan apapun, karena struktur file di dalam volume udah persis sama kayak sebelum di-backup.
3. Otomatisasi Pakai Cron
Biar proses backup Docker volume ini gak perlu dilakuin manual tiap hari, bikin script backup dan jadwalin pakai cron. Bikin file backup-docker.sh:
#!/bin/bash
BACKUP_DIR=/home/user/docker-backups
mkdir -p $BACKUP_DIR
docker run --rm
-v mydata:/source:ro
-v $BACKUP_DIR:/backup
alpine tar czf /backup/mydata-$(date +%Y%m%d).tar.gz -C /source .
# Hapus backup yang lebih lama dari 7 hari
find $BACKUP_DIR -name "mydata-*.tar.gz" -mtime +7 -delete
Kasih izin eksekusi, terus daftarin ke crontab biar jalan otomatis tiap hari jam 2 pagi:
chmod +x backup-docker.sh
crontab -e
Tambahin baris ini di crontab:
0 2 * * * /home/user/backup-docker.sh
Script di atas juga otomatis hapus backup yang lebih lama dari 7 hari, biar storage VPS kamu gak penuh sama file backup lama yang menumpuk.
Kendala yang Sering Muncul
- Backup file-nya 0 byte atau kosong
Biasanya karena nama volume yang kamu tulis di command salah/typo. Cek lagi pakaidocker volume lsbuat mastiin nama volume-nya persis. - Restore berhasil tapi aplikasi tetap error/data gak muncul
Cek permission file hasil restore, kadang UID/GID di dalam container beda sama yang ada di file backup. Coba jalanindocker exec container_name chown -R user:group /path/data. - Cron job gak jalan otomatis
Cek log cron dengangrep CRON /var/log/syslog, dan pastikan path di script pakai absolute path, bukan relative path, karena environment cron beda dari terminal interaktif biasa. - Backup database jadi corrupt/gak konsisten
Ini biasanya karena backup dilakuin sambil database masih aktif nulis data. Selalu stop container database dulu sebelum backup, atau pakai tools backup khusus database (mysqldump, pg_dump) buat hasil yang lebih aman dibanding backup volume mentah.
Penutup
Nah, segitu aja cara backup Docker volume dan restore-nya di VPS. Metode tar ini simpel dan gak butuh tools tambahan, cocok buat kebanyakan use case. Kalau kamu udah pakai Portainer buat manage container, kamu juga bisa cek volume yang ada langsung dari dashboard-nya sebelum backup.
Yang paling penting: jangan nunggu sampai data ilang baru mikirin backup. Setup cron job-nya dari awal, biar backup jalan otomatis tanpa kamu perlu ingetin terus. Kalau ada yang error atau nyangkut, drop komentar aja bro.
























