4. Volume & Data
Container itu sementara
Section titled “Container itu sementara”Perubahan file di dalam container disimpan di lapisan milik container itu sendiri. Begitu container dihapus, semua perubahan ikut hilang. Ini disengaja: container boleh dibuang dan dibuat ulang kapan saja. Data yang perlu bertahan — database, file upload, konfigurasi — harus disimpan di luar container.
Docker menyediakan dua cara:
| Named volume | Bind mount | |
|---|---|---|
| Lokasi data | dikelola Docker (/var/lib/docker/volumes/...) |
folder pilihanmu di host |
| Penulisan | -v data-web:/path |
-v ~/situs:/path atau -v /opt/app/html:/path |
| Cocok untuk | database, data aplikasi | file yang ingin kamu edit langsung: HTML, konfigurasi |
Named volume
Section titled “Named volume”docker volume create data-webdocker run -d --name web1 -p 8081:80 \ -v data-web:/usr/share/nginx/html nginxdocker volume lsSaat volume kosong dipasang pertama kali, Docker menyalin isi folder tujuan dari image ke volume. Setelah itu, volume hidup terpisah dari container: hapus container, buat container baru dengan volume yang sama, datanya tetap ada.
Bind mount
Section titled “Bind mount”docker run -d --name web3 -p 8082:80 \ -v ~/situs:/usr/share/nginx/html nginxFolder ~/situs di host dipakai langsung oleh container. Ubah file di host, hasilnya langsung terlihat tanpa restart. Halaman utama GSTNV-LAB dijalankan dengan cara ini.
Tambahkan :ro di akhir (-v ~/situs:/usr/share/nginx/html:ro) agar container hanya bisa membaca, tidak bisa mengubah file di host.
- Buat volume bernama
data-web.Petunjuk
docker volume create data-web - Jalankan nginx
web1di port 8081 dengan volumedata-webdi/usr/share/nginx/html.Petunjuk
docker run -d --name web1 -p 8081:80 -v data-web:/usr/share/nginx/html nginx - Ubah
index.htmldi dalam container lewatdocker exec.Petunjuk
docker exec web1 sh -c "echo '<h1>Data saya</h1>' > /usr/share/nginx/html/index.html" - Hapus container
web1. Volume-nya tetap ada.Petunjuk
docker rm -f web1 - Buat container baru
web2dengan volume yang sama, lalu buktikan dengancurl localhost:8081bahwa datanya masih ada.Petunjuk
docker run -d --name web2 -p 8081:80 -v data-web:/usr/share/nginx/html nginx lalu curl localhost:8081 - Pakai bind mount: sajikan folder
~/situsmilikmu lewat containerweb3di port 8082.Petunjuk
docker run -d --name web3 -p 8082:80 -v ~/situs:/usr/share/nginx/html nginx - Ubah
~/situs/index.htmldari host, lalucurl localhost:8082— perubahannya langsung terlihat.Petunjuk
echo '<h1>Diubah dari host</h1>' > ~/situs/index.html lalu curl localhost:8082

