Secara default, data dalam sebuah container bersifat sementara — hilang saat container dihapus. Volumes (dan bind mounts) menyediakan penyimpanan persisten yang bertahan melampaui lifecycle container, penting untuk database dan data apa pun yang harus bertahan saat container di-restart atau dihapus.
Masalah: container bersifat sementara
A container's writable layer is DELETED when the container is removed:
→ data written inside the container (e.g. a database's files) is LOST
→ containers are meant to be disposable/replaceable → don't store important data in them
→ For persistent data, you need storage OUTSIDE the container's lifecycle.
Volumes — penyimpanan persisten yang dikelola Docker
# create and use a named volume (managed by Docker)
docker volume create mydata
docker run -v mydata:/var/lib/mysql mysql # mount the volume into the container
# → data in /var/lib/mysql persists in the volume, surviving container removal
docker volume ls # list volumes
docker volume inspect mydata # details
Volumes adalah penyimpanan persisten yang dikelola Docker (disimpan di host, dikelola oleh Docker) — cara yang lebih disukai untuk mempertahankan data. Data di path yang di-mount bertahan bahkan jika container dihapus.
Bind mounts — memetakan direktori host
# bind mount: map a specific HOST directory into the container
docker run -v /host/path:/app -p 3000:3000 myapp
docker run -v $(pwd):/app myapp # mount the current directory (great for development)
# → changes on the host are reflected in the container (and vice versa)
Bind mounts memetakan direktori host ke dalam container — berguna untuk development (mengedit kode di host, melihat perubahan secara langsung di container).
Volumes vs bind mounts
VOLUMES → Docker-managed, portable, the preferred choice for PERSISTENT DATA
(databases, uploads) — decoupled from the host's filesystem layout
BIND MOUNTS → map a specific host path; great for DEVELOPMENT (live code reload)
and sharing host files; tied to the host's filesystem
tmpfs → in-memory (non-persistent), for sensitive/temporary data
Mengapa ini penting
Memahami persistensi data dengan volumes sangat penting untuk menggunakan Docker dengan benar pada aplikasi apa pun yang memiliki data, sehingga ini adalah pengetahuan praktis yang penting.
Masalah fundamental — container bersifat sementara, dengan layer yang dapat ditulis dihapus saat removal, yang berarti data yang ditulis di dalam container hilang — adalah konsep kritis: container dirancang untuk dapat dibuang, sehingga menyimpan data penting di dalamnya (seperti file database) menyebabkan kehilangan data saat container diganti. Volumes mengatasi ini dengan menyediakan penyimpanan persisten yang dikelola Docker yang berada di luar lifecycle container, sehingga data (database, upload, status apa pun) bertahan saat container dihapus dan diganti — penting untuk aplikasi yang stateful.
Memahami bind mounts (memetakan direktori host ke dalam container) penting untuk development (mengedit kode di host dan melihat perubahan secara langsung di container, workflow dev yang sangat umum) dan untuk berbagi file host.
Mengetahui perbedaannya — volumes (dikelola Docker, portabel, pilihan yang lebih disukai untuk data persisten aplikasi seperti database) versus bind mounts (spesifik ke path host, bagus untuk development) — memandu pemilihan pendekatan yang tepat.
Karena container bersifat sementara secara desain dan kebanyakan aplikasi nyata memiliki data yang harus persisten (terutama database), dan karena volumes adalah mekanisme penting untuk penyimpanan persisten (dengan bind mounts penting untuk development), memahami persistensi data Docker — masalah container sementara, volumes untuk data persisten, bind mounts untuk development, dan kapan menggunakan masing-masing — adalah pengetahuan Docker yang penting dan relevan secara praktis, diperlukan untuk menjalankan aplikasi stateful dengan benar dan menghindari kesalahan serius kehilangan data yang disimpan di dalam container yang dapat dibuang.
