Persistent Data #

Salah satu kesalahpahaman paling umum ketika mulai menggunakan Docker adalah menganggap container sebagai tempat penyimpanan data. Padahal, secara default container bersifat ephemeral: ketika container dihapus, semua data di dalam filesystem container ikut hilang.

Inilah alasan mengapa konsep persistent data menjadi sangat penting di Docker. Persistent data memungkinkan data tetap aman dan bertahan meskipun container:

  • dihentikan (stop)
  • di-restart
  • dihapus dan dibuat ulang

Untuk memudahkan pemahaman, berikut gambaran sederhana hubungan container dan penyimpanan data di Docker:

+-------------------+
|   Application     |
|   (Container)     |
|                   |
|  /app/data  ----+ |  <- data aplikasi
+-------------------+ |
                      |
          +-----------v-----------+
          |   Volume / Bind Mount |
          |   (Host / External)   |
          +-----------------------+

Diagram di atas menunjukkan bahwa data aplikasi tidak benar-benar disimpan di container, melainkan di volume atau bind mount yang berada di luar lifecycle container.

Mengapa Persistent Data Penting di Docker? #

Tanpa mekanisme persistent data, Docker akan sangat berbahaya untuk aplikasi nyata (real-world application). Beberapa alasan utamanya:

  1. Keamanan Data Data database, file upload, log, dan konfigurasi tidak boleh hilang hanya karena container restart.

  2. Scalability & Deployment Dalam CI/CD dan orchestration (Docker Compose, Swarm, Kubernetes), container sering dibuat dan dihancurkan otomatis.

  3. Separation of Concern Aplikasi fokus pada logic, sedangkan data dikelola secara terpisah.

  4. Backup & Migration Data dapat dibackup, dipindahkan, atau direstore tanpa menyentuh container.


Karakteristik Data di Container #

Secara default, filesystem di dalam container:

  • Bersifat read-write layer di atas image
  • Hilang ketika container dihapus
  • Tidak cocok untuk data jangka panjang

Ilustrasi sederhana lifecycle container:

Docker Image -> Container -> Write Data
                     |
                     +-- container dihapus -> data hilang

Karena itu, Docker menyediakan beberapa mekanisme resmi untuk menyimpan data secara persisten.


Mekanisme Persistent Data di Docker #

Docker menyediakan 3 mekanisme utama untuk menyimpan data secara persisten:

  1. Volume
  2. Bind Mount
  3. tmpfs (khusus memory, non-persistent)

Mari kita bahas satu per satu.


Docker Volume #

Apa itu Docker Volume? #

Docker Volume adalah mekanisme penyimpanan data yang dikelola langsung oleh Docker.

Karakteristik utama:

  • Disimpan di host (biasanya /var/lib/docker/volumes)
  • Tidak tergantung struktur folder host
  • Aman dari perubahan tidak sengaja
  • Mudah di-backup dan di-migrate

Diagram Docker Volume #

+-------------------+
|   Container       |
|  /var/lib/mysql   |
+---------+---------+
          |
          v
+---------------------------+
| Docker Volume             |
| mysql-data                |
| (managed by Docker)       |
+---------------------------+

Contoh Penggunaan Volume #

docker volume create mysql-data

docker run -d \
  --name mysql \
  -v mysql-data:/var/lib/mysql \
  mysql:8

Kapan Menggunakan Volume? #

Gunakan Docker Volume jika:

  • Menyimpan database
  • Menyimpan state aplikasi
  • Ingin solusi portable dan aman
  • Digunakan di production

Bind Mount #

Apa itu Bind Mount? #

Bind mount menghubungkan langsung folder di host ke folder di container.

Karakteristik:

  • Path host ditentukan manual
  • Sangat fleksibel
  • Bergantung pada struktur filesystem host

Diagram Bind Mount #

Host Machine                    Container
+------------------+            +------------------+
| /home/app/data   | <--------> | /app/data        |
+------------------+            +------------------+

Contoh Bind Mount #

docker run -d \
  -v /home/app/data:/app/data \
  my-app

Kapan Menggunakan Bind Mount? #

Cocok untuk:

  • Local development
  • Live reload source code
  • Debugging
  • Eksperimen

⚠️ Tidak direkomendasikan untuk production kecuali benar-benar paham implikasinya.


tmpfs Mount #

Apa itu tmpfs? #

tmpfs menyimpan data langsung di memory (RAM), bukan di disk.

Karakteristik:

  • Sangat cepat
  • Data hilang saat container berhenti
  • Cocok untuk data sensitif atau sementara

Contoh tmpfs #

docker run -d \
  --tmpfs /app/cache \
  my-app

Use Case tmpfs #

  • Cache
  • Session sementara
  • Token sensitif

Perbandingan Volume vs Bind Mount #

AspekVolumeBind Mount
Dikelola Docker
PortabilityTinggiRendah
Aman dari human error
Cocok untuk Production⚠️
Cocok untuk Local Dev

Persistent Data di Docker Compose #

Dalam Docker Compose, volume didefinisikan secara eksplisit.

Contoh Docker Compose #

version: '3.9'
services:
  db:
    image: mysql:8
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:

Keuntungan:

  • Volume otomatis dibuat
  • Konsisten antar environment
  • Mudah dikelola

Best Practice Persistent Data di Docker #

  1. Gunakan Docker Volume untuk Production
  2. Jangan simpan data penting di filesystem container
  3. Pisahkan data, config, dan log
  4. Backup volume secara berkala
  5. Gunakan tmpfs untuk data sensitif sementara
  6. Gunakan bind mount hanya untuk development

Kesimpulan #

Persistent data adalah fondasi penting dalam arsitektur Docker.

Tanpa mekanisme ini:

  • Container menjadi berbahaya untuk aplikasi nyata
  • Data mudah hilang
  • Deployment tidak stabil

Dengan memahami:

  • sifat ephemeral container
  • perbedaan volume dan bind mount
  • best practice penyimpanan data

Anda dapat membangun aplikasi Docker yang aman, scalable, dan production-ready.

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