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:
- Docker daemon menerima instruksi bind mount
- Kernel Linux membuat mount point baru
- Direktori host “diproyeksikan” ke namespace filesystem container
- 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 hosttarget: 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:
| Aspek | Bind Mount | Docker Volume |
|---|---|---|
| Lokasi data | Ditentukan user | Dikelola Docker |
| Ketergantungan host | Tinggi | Rendah |
| Portabilitas | Rendah | Tinggi |
| Performa | Sangat cepat (native) | Cepat |
| Keamanan | Lebih berisiko | Lebih aman |
| Cocok untuk | Dev & debug | Production |
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:
.envnginx.confconfig.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:
Gunakan hanya untuk development
Jangan gunakan bind mount untuk data production
Gunakan opsi
:rojika hanya butuh read-onlyvolumes: - ./config:/app/config:roJangan mount seluruh root filesystem
Pastikan permission user di container aman
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.