Untuk proyek Docker lokal di macOS, gunakan bind mount jika Anda perlu mengedit atau memeriksa file yang sama di macOS dan kontainer; gunakan named volume jika kontainer harus memiliki data persisten seperti database atau cache. Tolok ukur praktisnya adalah apakah Anda memerlukan akses langsung ke file-file tersebut di Finder atau aplikasi Mac. Jika ya, kaitkan (bind) folder proyek tertentu tersebut. Jika tidak, simpan data dalam named volume yang dikelola oleh Docker.

Apa perbedaan antara kedua tipe mount ini?

Bind mount menghubungkan jalur (path) di Mac Anda ke jalur di dalam kontainer. Perubahan dapat terlihat dari kedua sisi, sehingga sangat berguna untuk kode sumber, konfigurasi, dan file yang dihasilkan (generated files) yang ingin Anda simpan di folder proyek. Named volume disimpan dan dikelola oleh Docker, serta dipasang ke kontainer pada jalur yang ditentukan. Docker merekomendasikan volume untuk data kontainer yang persisten dan ketika host tidak memerlukan akses file langsung. Dokumentasi bind mount Docker dan dokumentasi volume menjelaskan perbedaan-perbedaan ini.

Data Anda Biasanya pilih Alasan
File sumber yang Anda edit di IDE Mac Bind mount Mac dan kontainer sama-sama mengakses file proyek.
Direktori data database Named volume Docker mengelola data kontainer persisten tanpa membagikan setiap file database melalui macOS.
Output yang ingin Anda buka atau gunakan dengan alat Mac Bind mount Output akan muncul di jalur Mac yang dipilih.
Status sementara (temporary state) yang dapat dibuang Tidak keduanya secara default Pertimbangkan apakah data tersebut membutuhkan persistensi sama sekali; named volume tetap ada setelah kontainer dihapus kecuali Anda menghapusnya secara terpisah.

Mengapa macOS membuat pilihan ini penting

Docker Desktop menjalankan kontainer Linux di dalam mesin virtual (virtual machine) Linux, sehingga Docker bertindak sebagai perantara akses antara sistem file Mac dan kontainer. Dokumentasi pengaturan Docker menyatakan bahwa berbagi file host menambah beban (overhead); berbagi terlalu banyak file dapat meningkatkan beban CPU dan memperlambat operasi sistem file. Docker secara khusus merekomendasikan untuk menyimpan item non-kode seperti cache dan database di dalam volume data demi menjaga performa. Pengaturan Docker Desktop

Panduan tersebut bukan berarti setiap bind mount akan berjalan lambat. Ini berarti jenis data dan alur kerja yang Anda amati sangatlah berpengaruh. Struktur folder kode sumber (source tree) suatu proyek sangat cocok menggunakan bind mount karena tujuannya adalah pengeditan di Mac. Banyaknya file database yang kerap berubah biasanya tidak perlu dilihat di Finder, sehingga named volume merupakan titik awal yang lebih baik. Untuk repositori yang luar biasa besar, Docker Desktop juga mendokumentasikan Synchronized file shares sebagai opsi terbatas berbasis langganan yang dapat meningkatkan performa bind-mount; fitur ini mengubah perilaku berbagi file, bukan perbedaan mendasar antara kode sumber yang terlihat oleh host dan volume yang dikelola oleh Docker. Synchronized file shares

Menyiapkan folder proyek dan volume database

Dari Terminal, masuk ke direktori proyek Anda dan gunakan bind mount untuk kode. Contoh ini memasang folder saat ini pada /workspace di dalam kontainer Alpine sekali pakai; ganti image atau perintah sesuai dengan kontainer pengembangan Anda.

docker run --rm -it \
  --mount "type=bind,source=$PWD,target=/workspace" \
  alpine:latest sh

Pada shell default macOS, $PWD diekspansi menjadi direktori saat ini. Menaruh tanda kutip pada argumen mount secara utuh akan menjaga jalur host hasil ekspansi tetap utuh jika nama folder mengandung spasi. Sintaks --mount milik Docker bersifat eksplisit. Jalur host harus sudah ada: Docker mendokumentasikan bahwa jalur sumber yang hilang akan menyebabkan --mount gagal secara default. Bind mount dapat ditulisi (writable) kecuali ditandai hanya-baca (read-only), sehingga proses dalam kontainer dapat mengubah file di direktori Mac yang dipasang. Gunakan readonly jika kontainer hanya perlu membaca proyek. Opsi dan perilaku bind mount

Untuk data yang dimiliki oleh kontainer, buat dan pasang named volume sebagai gantinya. Perintah ini menjalankan PostgreSQL dengan sebuah volume pada direktori data standarnya:

docker volume create project-db

docker run --name project-postgres \
  --mount type=volume,source=project-db,target=/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD='local-dev-only' \
  -d postgres:17

Di sini project-db adalah nama volume persisten, dan POSTGRES_PASSWORD hanyalah pengaturan lokal sebagai contoh, bukan pola pengelolaan rahasia untuk produksi. Menghapus kontainer tidak akan otomatis menghapus named volume. Persistensi ini sangat membantu saat penggantian kontainer, tetapi juga berarti data lama bisa tetap ada dan eksekusi baru mungkin menggunakannya kembali. Catat nama volume serta konfigurasi kontainer yang diperlukan untuk menyambung kembali ke volume tersebut.

Periksa visibilitas, portabilitas, dan pembersihan

Sebelum memilih, tanyakan: apakah saya akan membuka atau mengedit file-file ini secara langsung dengan perangkat lunak Mac? Jika ya, kaitkan (bind-mount) folder yang paling spesifik untuk tugas tersebut, alih-alih membagikan bagian direktori home Anda yang terlalu luas tanpa perlu. Docker mencatat bahwa macOS dan Linux menangani sensitivitas huruf besar/kecil (case) pada nama file secara berbeda, yang dapat menimbulkan masalah terkait nama file yang case-sensitive di dalam kontainer. Periksa nama-nama file secara saksama jika proyek berperilaku berbeda di dalam Linux. Catatan berbagi file Docker Desktop

Jika file-file tersebut seharusnya tetap berada di dalam batas kontainer, pilih named volume dan kelola menggunakan perintah volume Docker. Volume tersebut bukanlah folder Finder biasa di lokasi proyek Anda; Docker Desktop menyimpan data Linux miliknya di dalam lingkungan VM. Perlakukan penghapusan volume sebagai langkah penghapusan data, dan cadangkan konten volume yang penting secara terpisah. Panduan pencadangan Docker mencatat bahwa image kontainer tidak menyertakan perubahan sistem file yang disimpan di volume terpasang. Pencadangan dan pemulihan Docker Desktop

Bind mount bergantung pada keberadaan jalur host, sehingga bisa menjadi kurang portabel di berbagai perangkat Mac dengan tata letak direktori yang berbeda. Named volume menghindari dependensi jalur proyek tersebut, namun datanya tetap memerlukan rencana pencadangan atau migrasi yang jelas. Oleh karena itu, pengaturan default sederhana bagi banyak proyek pengembangan di Mac adalah menggunakan bind mount untuk kode sumber dan named volume untuk status database, dengan setiap lokasi data didokumentasikan di konfigurasi Compose proyek atau petunjuk eksekusi.

Sumber