Backup & Restore #

Dalam dunia container, data adalah aset paling kritikal. Container Docker bersifat ephemeral (mudah dibuat dan dihancurkan), tetapi data tidak boleh ikut hilang. Di sinilah konsep backup & restore menjadi sangat penting.

Banyak developer pemula beranggapan bahwa membackup container berarti membackup seluruh container image. Padahal, praktik yang benar adalah membackup data, bukan container-nya.

Agar lebih mudah dipahami, perhatikan diagram berikut.

+------------------+        +------------------+
|   Container App  |        |   Container DB   |
|                  |        |                  |
|  /app            |        |  /var/lib/mysql  |
+--------+---------+        +--------+---------+
         |                           |
         |         Volume            |
         +-----------+---------------+
                     |
              +------+-------+
              | Docker Volume|
              |   /data      |
              +------+-------+
                     |
          Backup (tar, rsync, dump)
                     |
              +------+------+
              | Backup File |
              | (.tar/.sql) |
              +-------------+

Diagram ini menunjukkan bahwa backup dilakukan pada volume atau data, bukan pada container itu sendiri.

Prinsip Dasar Backup & Restore #

Sebelum masuk ke teknis, ada beberapa prinsip penting:

  1. Container bersifat stateless

    • Container bisa dihapus dan dibuat ulang kapan saja
    • Jangan menyimpan data penting di filesystem container
  2. Data harus disimpan di volume atau bind mount

    • Docker Volume (recommended)
    • Bind mount ke filesystem host
  3. Backup fokus pada data

    • File data
    • Database dump
    • Konfigurasi penting

Apa yang Perlu Dibackup di Docker? #

Tidak semua hal perlu dibackup. Berikut klasifikasinya:

Docker Image (❌ Tidak Wajib) #

  • Image bisa dibuild ulang dari Dockerfile
  • Simpan Dockerfile di Git, bukan di backup

Container (❌ Tidak Dianjurkan) #

  • Container adalah hasil runtime
  • Backup container = praktik buruk

Docker Volume (✅ Wajib) #

  • Database data
  • Uploaded files
  • Cache penting

Config & Environment (✅ Wajib) #

  • .env
  • docker-compose.yml
  • File konfigurasi aplikasi

Backup Docker Volume #

Melihat Daftar Volume #

docker volume ls

Inspect Volume #

docker volume inspect my_volume

Ini akan menunjukkan lokasi volume di host.

Backup dengan Container Helper #

Cara paling umum dan aman:

docker run --rm \
  -v my_volume:/data \
  -v $(pwd):/backup \
  alpine \
  tar czf /backup/my_volume_backup.tar.gz /data

Penjelasan:

  • my_volume:/data → mount volume
  • $(pwd):/backup → simpan hasil backup ke host
  • tar → kompres seluruh data volume

Restore Volume dari Backup #

docker run --rm \
  -v my_volume:/data \
  -v $(pwd):/backup \
  alpine \
  tar xzf /backup/my_volume_backup.tar.gz -C /

Setelah ini, volume akan kembali seperti kondisi saat backup.


Backup Database di Docker #

Untuk database, backup file volume saja sering tidak cukup. Praktik terbaik adalah logical backup (dump).

Contoh: Backup MySQL #

docker exec mysql_container \
  mysqldump -u root -p mydb > mydb_backup.sql

Restore MySQL #

docker exec -i mysql_container \
  mysql -u root -p mydb < mydb_backup.sql

Keuntungan dump database:

  • Konsisten
  • Mudah dipindahkan
  • Tidak tergantung filesystem internal DB

Backup dengan Docker Compose #

Struktur umum:

project/
├── docker-compose.yml
├── .env
├── backups/
└── volumes/

Backup volume via service sementara:

services:
  backup:
    image: alpine
    volumes:
      - db_data:/data
      - ./backups:/backup
    command: tar czf /backup/db_data.tar.gz /data

volumes:
  db_data:

Jalankan:

docker compose run --rm backup

Automasi Backup #

Di production, backup harus otomatis.

Opsi Umum: #

  1. Cron di host
  2. Cron container
  3. CI/CD pipeline
  4. Backup ke cloud storage (S3, GCS)

Contoh cron di host:

0 2 * * * docker run --rm \
  -v db_data:/data \
  -v /backup:/backup \
  alpine tar czf /backup/db_$(date +\%F).tar.gz /data

Kesalahan Umum #

  • Menyimpan data langsung di container
  • Backup image sebagai pengganti data
  • Tidak pernah mengetes restore
  • Backup manual tanpa automasi

Best Practice #

  1. Selalu gunakan volume untuk data
  2. Backup data, bukan container
  3. Gunakan database dump untuk DB
  4. Uji proses restore secara berkala
  5. Simpan backup di lokasi berbeda (off-site)
  6. Enkripsi backup untuk data sensitif
  7. Dokumentasikan prosedur restore

Penutup #

Backup & restore di Docker bukan soal Docker-nya, tetapi soal mengelola data dengan benar. Dengan memahami bahwa container bersifat sementara dan data harus dipisahkan melalui volume, proses backup menjadi sederhana, aman, dan scalable.

Jika prinsip ini diterapkan sejak awal, migrasi server, recovery insiden, hingga scaling aplikasi akan jauh lebih mudah dan minim risiko.

Ingat: Container bisa dibuat ulang, data tidak.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact