Bind Mount #

Dalam pengelolaan container Docker, penyimpanan data adalah topik yang sangat penting, terutama ketika kita berurusan dengan source code, configuration file, atau data yang harus langsung terhubung dengan sistem host. Salah satu mekanisme yang sering digunakan — namun sering juga disalahpahami — adalah bind mount.

Bind mount memungkinkan sebuah container mengakses langsung direktori atau file yang ada di host OS, tanpa lapisan abstraksi tambahan seperti Docker volume. Karena sifatnya yang “langsung ke host”, bind mount sangat powerful, tetapi juga memiliki implikasi terhadap keamanan, portabilitas, dan konsistensi environment.

Diagram Konsep Bind Mount #

Diagram berikut menggambarkan bagaimana bind mount bekerja secara konseptual:

+-------------------+           +----------------------+
|   Host OS         |           |   Docker Container   |
|                   |           |                      |
|  /home/user/app   |  <---->   |  /usr/src/app        |
|  (real directory) |  bind     |  (container path)    |
|                   |  mount    |                      |
+-------------------+           +----------------------+

Pada bind mount:

  • Direktori benar-benar milik host
  • Container hanya “meminjam” path tersebut
  • Perubahan di salah satu sisi langsung terlihat di sisi lain

Artikel ini akan membahas bind mount secara mendalam: mulai dari definisi, cara kerja di level OS, perbedaannya dengan volume, hingga best practice penggunaannya.

Apa Itu Bind Mount? #

Bind mount adalah mekanisme Docker untuk me-mount:

  • file, atau
  • direktori

langsung dari filesystem host ke dalam filesystem container.

Berbeda dengan Docker volume yang dikelola penuh oleh Docker, bind mount:

  • Menggunakan path absolut di host
  • Bergantung pada struktur direktori host
  • Tidak dikelola lifecycle-nya oleh Docker

Secara sederhana:

Bind mount = container membaca & menulis langsung ke filesystem host.


Cara Kerja Bind Mount di Level OS #

Docker berjalan di atas kernel Linux (secara native atau via VM di macOS/Windows). Bind mount memanfaatkan fitur kernel Linux berupa mount namespace.

Alurnya secara sederhana:

  1. Docker daemon menerima instruksi bind mount
  2. Kernel Linux membuat mount point baru
  3. Direktori host “diproyeksikan” ke namespace filesystem container
  4. Container melihat direktori tersebut seolah-olah miliknya sendiri

Tidak ada proses copy data. Tidak ada sync. Yang ada hanyalah satu filesystem, dua perspektif.


Cara Menggunakan Bind Mount #

Menggunakan Docker CLI #

Contoh bind mount saat menjalankan container:

docker run \
  -v /home/user/app:/usr/src/app \
  node:20

Atau dengan format yang lebih eksplisit:

docker run \
  --mount type=bind,source=/home/user/app,target=/usr/src/app \
  node:20

Penjelasan:

  • source: path di host
  • target: path di container

Menggunakan Docker Compose #

Contoh di docker-compose.yml:

services:
  app:
    image: node:20
    volumes:
      - ./app:/usr/src/app

Path ./app adalah path relatif terhadap lokasi file docker-compose.yml.


Bind Mount vs Docker Volume #

Perbandingan singkat:

AspekBind MountDocker Volume
Lokasi dataDitentukan userDikelola Docker
Ketergantungan hostTinggiRendah
PortabilitasRendahTinggi
PerformaSangat cepat (native)Cepat
KeamananLebih berisikoLebih aman
Cocok untukDev & debugProduction

Use Case Umum Bind Mount #

Local Development #

Use case paling populer:

  • Source code di-edit di host
  • Container langsung menjalankan perubahan

Contoh:

  • Node.js
  • Go
  • Python
  • PHP

Tanpa rebuild image setiap kali code berubah.

Live Reload / Hot Reload #

Framework seperti:

  • Nodemon
  • Vite
  • Air (Go)

sangat bergantung pada bind mount agar file watcher bisa bekerja.

Akses File Konfigurasi #

Contoh:

  • .env
  • nginx.conf
  • config.yaml

Tanpa perlu bake file tersebut ke dalam image.


Risiko dan Kekurangan Bind Mount #

Keamanan #

Container bisa:

  • Menghapus file host
  • Mengubah permission
  • Mengakses data sensitif

Terutama jika container berjalan sebagai root.

Tidak Portabel #

Bind mount bergantung pada:

  • Struktur folder host
  • OS
  • Path absolut

Compose file yang bekerja di laptop Anda belum tentu bekerja di mesin lain.

Perbedaan di macOS & Windows #

Di Linux:

  • Bind mount = native

Di macOS/Windows:

  • Bind mount melewati VM
  • Bisa lebih lambat
  • File watcher kadang tidak stabil

Kapan Sebaiknya Tidak Digunakan? #

Hindari bind mount jika:

  • Environment production
  • Data harus aman & konsisten
  • Aplikasi butuh portability tinggi
  • Deployment multi-host / orchestration (Kubernetes)

Dalam kondisi tersebut, Docker volume atau object storage adalah pilihan yang jauh lebih tepat.


Best Practice #

Beberapa praktik terbaik yang sangat disarankan:

  1. Gunakan hanya untuk development

  2. Jangan gunakan bind mount untuk data production

  3. Gunakan opsi :ro jika hanya butuh read-only

    volumes:
      - ./config:/app/config:ro
    
  4. Jangan mount seluruh root filesystem

  5. Pastikan permission user di container aman

  6. Kombinasikan dengan Docker volume untuk data penting


Penutup #

Bind mount adalah fitur Docker yang sangat powerful dan sangat membantu produktivitas developer, terutama dalam local development. Namun, kekuatan ini datang dengan konsekuensi: keamanan, portabilitas, dan kontrol.

Pahami satu prinsip utama berikut:

Bind mount cocok untuk developer, Docker volume cocok untuk production.

Dengan memahami cara kerja bind mount di level OS serta best practice penggunaannya, Anda dapat menggunakan Docker dengan lebih aman, efisien, dan profesional.

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