Mengapa Perlu Volume?
Container bersifat ephemeral — saat dihapus, semua data di dalamnya hilang. Volume memungkinkan data persist di luar lifecycle container.
Jenis Mount di Docker
- Named Volume — Dikelola Docker, data disimpan di Docker area
- Bind Mount — Map direktori host langsung ke container
- tmpfs Mount — Data di RAM, hilang saat container stop
Named Volume
# Buat volume
docker volume create db-data
# Gunakan volume
docker run -d \
--name postgres \
-v db-data:/var/lib/postgresql/data \
postgres:16
# List volumes
docker volume ls
# Inspect volume
docker volume inspect db-data
# Hapus volume
docker volume rm db-data
docker volume prune # hapus semua unused
Bind Mount (untuk Development)
# Mount source code ke container (hot reload)
docker run -d \
-v $(pwd):/app \
-v /app/node_modules \
-p 3000:3000 \
my-app
# $(pwd):/app = map current dir ke /app di container
# /app/node_modules = anonymous volume, jangan override
Volume di Docker Compose
services:
db:
image: postgres:16
volumes:
- postgres_data:/var/lib/postgresql/data # named volume
- ./init.sql:/docker-entrypoint-initdb.d/ # bind mount
app:
build: .
volumes:
- .:/app # bind mount (development)
- /app/node_modules # anonymous volume
volumes:
postgres_data: # deklarasi named volume