Volume vs Bind Mount #

Saat membangun aplikasi dengan Docker, penyimpanan data (storage) adalah salah satu topik yang sering membingungkan, terutama bagi yang baru masuk ke dunia container. Banyak yang bertanya:

“Kalau container dihapus, datanya ikut hilang nggak?”

Jawabannya: tergantung bagaimana kita menyimpan datanya.

Docker menyediakan beberapa mekanisme penyimpanan data, dan dua yang paling sering digunakan adalah Volume dan Bind Mount. Keduanya sama-sama memungkinkan container menyimpan data di luar lifecycle container, tetapi cara kerja, tujuan, dan best practice penggunaannya sangat berbeda.

Agar lebih mudah dipahami, perhatikan diagram konseptual berikut:

+---------------------+        +----------------------+
|     Container       |        |      Container       |
|                     |        |                      |
|  /data              |        |  /data               |
|    |                |        |    |                 |
|    v                |        |    v                 |
|  Volume             |        |  Bind Mount          |
|  (Docker Managed)   |        |  (/host/path)        |
+---------------------+        +----------------------+
        |                                |
        v                                v
  /var/lib/docker/...            /home/user/project

Diagram di atas menunjukkan perbedaan mendasar:

  • Volume dikelola penuh oleh Docker
  • Bind Mount langsung terhubung ke filesystem host

Artikel ini akan membahas keduanya secara mendalam, lengkap dengan perbandingan, use case, dan best practice.

Apa Itu Docker Volume? #

Docker Volume adalah mekanisme penyimpanan data yang dikelola sepenuhnya oleh Docker. Lokasi fisik datanya disimpan di direktori internal Docker (biasanya di /var/lib/docker/volumes).

Sebagai developer, kita tidak perlu peduli di mana tepatnya data disimpan di host.

Karakteristik Docker Volume #

  • Dikelola oleh Docker Engine
  • Tidak tergantung struktur folder host
  • Tetap ada meskipun container dihapus
  • Mudah di-backup, restore, dan migrate
  • Aman untuk production

Contoh Penggunaan Volume #

docker volume create app-data


docker run -d \
  --name myapp \
  -v app-data:/data \
  myapp-image

Atau di docker-compose.yml:

services:
  app:
    image: myapp-image
    volumes:
      - app-data:/data

volumes:
  app-data:

Pada contoh ini:

  • app-data adalah volume Docker
  • /data adalah path di dalam container

Container boleh mati, restart, atau dihapus — data tetap aman.


Apa Itu Bind Mount? #

Bind Mount adalah mekanisme yang menghubungkan folder atau file langsung dari host ke dalam container.

Dengan bind mount, container membaca dan menulis data langsung ke filesystem host.

Karakteristik Bind Mount #

  • Menggunakan path absolut di host
  • Tidak dikelola oleh Docker
  • Sangat bergantung pada struktur folder host
  • Perubahan langsung terlihat di host dan container
  • Kurang aman jika salah konfigurasi

Contoh Penggunaan Bind Mount #

docker run -d \
  --name myapp \
  -v /home/user/project:/app \
  myapp-image

Atau di docker-compose.yml:

services:
  app:
    image: myapp-image
    volumes:
      - ./project:/app

Pada contoh ini:

  • ./project adalah folder di host
  • /app adalah folder di container

Setiap perubahan file di host langsung terlihat di container, dan sebaliknya.


Perbedaan Utama Volume vs Bind Mount #

AspekVolumeBind Mount
ManajemenDikelola DockerDikelola user / OS
Lokasi DataInternal DockerPath host langsung
PortabilitasTinggiRendah
KeamananLebih amanLebih berisiko
Cocok untuk ProductionYaJarang
Cocok untuk DevelopmentKadangSangat cocok
Dependency ke HostMinimTinggi

Kapan Sebaiknya Menggunakan Docker Volume? #

Gunakan Docker Volume jika:

  • Menyimpan data database (MySQL, PostgreSQL, MongoDB)
  • Data harus tetap ada meskipun container dihapus
  • Aplikasi berjalan di production
  • Deployment di server, cloud, atau orchestrator (Swarm, Kubernetes)
  • Membutuhkan backup dan migrasi data

Contoh nyata:

  • Data PostgreSQL
  • Upload file user
  • Cache aplikasi

Kapan Sebaiknya Menggunakan Bind Mount? #

Gunakan Bind Mount jika:

  • Local development
  • Hot reload source code
  • Debugging
  • Sinkronisasi file real-time

Contoh nyata:

  • Mount source code ke container Go / Node.js / Python
  • Mount file konfigurasi lokal
  • Edit code di host, jalankan di container

Risiko & Hal yang Perlu Diwaspadai #

Risiko Bind Mount #

  • Struktur folder host berubah → container rusak
  • Permission issue (Linux vs macOS vs Windows)
  • Potensi overwrite file host
  • Kurang aman untuk production

Volume Lebih Aman, Tapi… #

  • Tidak cocok untuk hot reload source code
  • Lokasi data tidak transparan
  • Perlu command Docker untuk inspeksi

Best Practice Penggunaan #

Rule sederhana yang sering dipakai:

  • Production → Volume
  • Local Development → Bind Mount

Best practice tambahan:

  • Jangan gunakan bind mount untuk database production
  • Jangan mount root filesystem host
  • Gunakan named volume (bukan anonymous volume)
  • Pisahkan volume data dan volume konfigurasi

Penutup #

Docker Volume dan Bind Mount bukan mana yang lebih baik, tetapi mana yang lebih tepat untuk kebutuhan tertentu.

  • Volume unggul dalam stabilitas, keamanan, dan portabilitas
  • Bind Mount unggul dalam fleksibilitas dan kemudahan development

Dengan memahami perbedaan mendasar ini, kamu bisa:

  • Mendesain container yang lebih aman
  • Menghindari kehilangan data
  • Mengoptimalkan workflow development dan production
About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact