“Lho, kok dataku hilang pas container di-restart?!”
– Seorang developer yang baru kenal Docker, episode ke-100
Docker itu keren, tapi ada satu jebakan pemula yang sering bikin pusing: data yang tiba-tiba hilang setelah container mati.
Kenapa bisa begitu? Karena container Docker bersifat ephemeral alias sementara.
Jadi kalau container dihapus, semua data yang ada di dalamnya juga lenyap tanpa jejak.
Terus gimana biar data aplikasi tetap aman walaupun container mati?
Salah satu solusinya adalah menggunakan Bind Mounts!
Di artikel ini, kita akan membahas:
Apa itu Bind Mounts dan kenapa penting?
Cara menggunakan Bind Mounts untuk menyimpan data aplikasi secara persisten.
Perbedaan Bind Mounts dengan Docker Volume.
Tips & troubleshooting biar nggak salah langkah!
Yuk, kita bahas satu per satu!
1. Apa Itu Bind Mounts dan Kenapa Penting?
Bind Mounts adalah cara menyimpan data di Docker container dengan menghubungkan folder di sistem host ke dalam container.
Keuntungannya:
Data tetap ada meskipun container dihapus atau di-restart.
Bisa langsung mengedit file di host, tanpa masuk ke container.
Mudah digunakan tanpa perlu konfigurasi tambahan.
Kekurangannya:
Kurang aman, karena container bisa mengakses sistem file host secara langsung.
Kurang portabel, karena terikat pada path spesifik di sistem host.
2. Cara Menggunakan Bind Mounts di Docker
Kita langsung coba praktek!
A. Membuat Bind Mounts Saat Menjalankan Container
Misalkan kita ingin menjalankan Nginx dan menyimpan konfigurasi di folder lokal ./nginx-config
:
docker run -d -p 8080:80 \
-v $(pwd)/nginx-config:/etc/nginx \
--name web-container nginx
Penjelasan:
-v $(pwd)/nginx-config:/etc/nginx
→ Menghubungkan foldernginx-config
di host ke/etc/nginx
di dalam container.- Jika kita mengedit file di
./nginx-config
, perubahan akan langsung terlihat di container!
B. Bind Mounts untuk Database (MySQL Contoh Kasus)
Sekarang, kita coba bind mount untuk database MySQL supaya datanya tetap aman!
mkdir -p ~/mysql-data # Buat folder untuk menyimpan data MySQL
docker run -d -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=secret \
-v ~/mysql-data:/var/lib/mysql \
--name mysql-container mysql
Penjelasan:
-v ~/mysql-data:/var/lib/mysql
→ Semua data MySQL akan disimpan di folder~/mysql-data
di host.- Jika container dihapus, datanya tidak akan hilang karena tersimpan di host! 🎉
3. Melihat dan Mengecek Bind Mounts di Docker
Untuk melihat bind mount yang sedang aktif di container:
docker inspect mysql-container
Cari bagian Mounts
:
"Mounts": [
{
"Type": "bind",
"Source": "/home/user/mysql-data",
"Destination": "/var/lib/mysql"
}
]
Artinya: Folder /home/user/mysql-data
di host sudah terhubung ke /var/lib/mysql
di dalam container.
4. Perbedaan Bind Mount vs Docker Volume
Fitur | Bind Mount | Docker Volume |
---|---|---|
Dikelola oleh Docker? | ❌ Tidak | ✔️ Iya |
Portabilitas | ❌ Terikat pada path spesifik di host | ✔️ Bisa digunakan di berbagai container |
Keamanan | ❌ Kurang aman, bisa mengakses semua file host | ✔️ Lebih aman karena diisolasi |
Performa | ❌ Bisa lebih lambat | ✔️ Optimasi lebih baik di Docker |
Cocok untuk? | Akses file langsung dari host | Penyimpanan data aplikasi jangka panjang |
Gunakan Bind Mount kalau kamu ingin mengedit file langsung dari host (misal untuk kode aplikasi atau konfigurasi).
Gunakan Docker Volume kalau butuh penyimpanan jangka panjang yang lebih aman.
5. Troubleshooting: Masalah Umum dengan Bind Mounts
Kasus 1: File di Bind Mount Tidak Bisa Ditulis oleh Container
Error:
Permission denied when writing to bind mount
Solusi:
- Pastikan folder di host memiliki izin yang cukup:
sudo chmod -R 777 ~/mysql-data
- Atau jalankan container dengan flag
--user $(id -u):$(id -g)
.
Kasus 2: Bind Mount Tidak Berfungsi
Error:
No such file or directory
Solusi:
- Pastikan folder di host sudah benar-benar ada.
- Kalau menggunakan
-v $(pwd)/folder:/path_dalam_container
, pastikan kamu menjalankannya di lokasi yang benar.
6. Kesimpulan: Bind Mounts untuk Data yang Lebih Aman!
Intinya:
Bind Mounts menghubungkan folder di host ke dalam container.
Data tetap aman walaupun container mati atau dihapus.
Gunakan Bind Mounts kalau butuh akses langsung ke file di host.
Gunakan Docker Volumes kalau butuh penyimpanan lebih aman dan fleksibel.
Dengan menggunakan Bind Mounts, kamu bisa mengelola data aplikasi dengan lebih baik, tanpa takut kehilangan data setiap kali container dihapus!
0 Comments