Data Loss #

Docker sangat populer karena kemampuannya menjalankan aplikasi secara konsisten dan terisolasi. Namun, salah satu kesalahan paling umum — dan paling mahal — dalam penggunaan Docker adalah kehilangan data (data loss). Banyak engineer menganggap container sebagai “mini server” permanen, padahal secara konsep Docker tidak dirancang untuk menyimpan data secara persisten di dalam container.

Masalah data loss biasanya baru terasa saat:

  • container direstart atau di-recreate,
  • image di-update,
  • deployment otomatis dijalankan,
  • atau node tempat container berjalan mati.

Untuk mempermudah pemahaman, berikut gambaran sederhana bagaimana data bisa hilang di Docker.

+-------------------+        docker rm / redeploy
|   Container       |  ---------------------------->
|                   |        ❌ DATA HILANG
|  /app/data        |
+-------------------+
        ↑
   data disimpan
   di filesystem
   container

Diagram di atas menunjukkan skenario paling umum: data disimpan langsung di filesystem container, bukan di mekanisme storage yang persisten.

Konsep Dasar: Container Bersifat Ephemeral #

Hal pertama yang wajib dipahami:

Container bersifat ephemeral (sementara)

Artinya:

  • Container boleh mati kapan saja
  • Container boleh dihapus dan dibuat ulang kapan saja
  • Container tidak menjamin keberlangsungan data

Docker container bukan VM. Ketika container dihapus:

  • filesystem container ikut hilang
  • perubahan data di dalamnya tidak bisa dikembalikan

Inilah akar dari hampir semua kasus data loss di Docker.


Penyebab Umum Data Loss di Docker #

1. Menyimpan Data Langsung di Filesystem Container #

Contoh kesalahan umum:

  • database menyimpan data di /var/lib/mysql tanpa volume
  • aplikasi upload file ke /uploads di dalam container
  • log aplikasi ditulis ke /var/log/app.log

Ketika container:

  • direstart
  • di-redeploy
  • dihapus (docker rm)

➡️ semua data tersebut hilang permanen.

2. Rebuild Image dan Recreate Container #

Dalam workflow modern (CI/CD):

  • image sering di-build ulang
  • container lama dihapus
  • container baru dijalankan

Jika data berada di container lama:

old container  ❌ data
new container  kosong

Docker tidak pernah memindahkan data otomatis antar container.

3. Menganggap docker restart Selalu Aman #

docker restart memang:

  • tidak menghapus container
  • tidak menghapus layer writable

Namun:

  • crash OS
  • disk error
  • force remove container

Tetap berisiko jika data tidak dipisahkan dari lifecycle container.

Restart bukan strategi persistence.

4. Salah Konfigurasi Volume #

Beberapa kesalahan konfigurasi volume:

  • lupa mount volume
  • typo path mount
  • mount ke path yang salah
  • volume terhapus (docker volume rm)

Contoh:

-v /data:/app/data   ❌ path salah

Aplikasi tetap berjalan, tapi data tersimpan di container — bukan di host.

5. Data di Bind Mount Host Tanpa Backup #

Bind mount:

./data:/var/lib/mysql

Jika:

  • host disk rusak
  • folder terhapus
  • server mati tanpa backup

➡️ data tetap hilang.

Docker bukan solusi backup.


Perbedaan Storage di Docker #

+---------------------+------------------+------------------+
| Jenis Storage       | Persisten        | Risiko Data Loss |
+---------------------+------------------+------------------+
| Container FS        | ❌ Tidak         | 🔥 Sangat Tinggi |
| Bind Mount          | ✅ Ya            | ⚠️ Tergantung    |
| Docker Volume       | ✅ Ya            | ✅ Lebih Aman    |
| External Storage    | ✅ Ya            | ✅ Paling Aman   |
+---------------------+------------------+------------------+

Best Practice Mencegah Data Loss di Docker #

1. Gunakan Docker Volume untuk Data Penting #

docker volume create app-data

services:
  app:
    volumes:
      - app-data:/app/data

Keuntungan:

  • lifecycle data terpisah dari container
  • tidak ikut terhapus saat redeploy
  • mudah di-backup

2. Pisahkan State dan Stateless #

Prinsip penting:

Container = stateless

  • Container hanya menjalankan logic

  • Data disimpan di:

    • volume
    • database
    • object storage

3. Gunakan External Storage untuk Data Kritis #

Contoh:

  • Database di RDS / Cloud SQL
  • File upload di S3 / GCS / MinIO
  • Cache di Redis

Container hanya sebagai compute layer.

4. Jangan Menyimpan Data di Image #

Kesalahan fatal:

  • COPY database ke image
  • COPY user data ke image

Image:

  • immutable
  • read-only setelah build

Image bukan tempat data runtime.

5. Selalu Punya Backup Strategy #

Minimal:

  • backup volume
  • backup database
  • backup object storage

Docker mempermudah deployment, bukan pemulihan data.


Studi Kasus Singkat #

Kasus 1: Database Hilang Setelah Redeploy #

Penyebab:

  • MySQL berjalan di container
  • data tidak pakai volume

Solusi:

  • gunakan Docker volume
  • atau pindahkan DB ke managed service

Kasus 2: File Upload Hilang Setelah Update Aplikasi #

Penyebab:

  • file upload disimpan di container path

Solusi:

  • bind mount
  • atau object storage

Kesimpulan #

Data loss di Docker bukan bug, tapi kesalahan pemahaman konsep.

Ingat prinsip utama:

  • Container bisa mati kapan saja
  • Container bisa dihapus kapan saja
  • Data tidak boleh bergantung pada container

Jika prinsip ini dipegang:

  • Docker menjadi sangat aman
  • deployment menjadi cepat
  • dan risiko data loss bisa dihindari sepenuhnya

“Treat containers as cattle, not pets — and never let your data live inside the cattle.”

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