Guides
Docker Volumes vs Bind Mounts उदाहरणांसह
By Ravindra Bagale, DevOps trainer · LinkedIn · Published: · Last updated:
DB साठी named volume; code साठी bind. Backup. World-writable नका.
Friends, volumes keep database files; bind mounts keep your editor live. Chala mitrano — pick the right mount.
मित्रांनो, volumes DB फाईल्स ठेवतात; bind mounts editor live ठेवतात. Chala mitrano — योग्य mount निवडा.
मित्रों, volumes DB फ़ाइलें रखते हैं; bind mounts editor live रखते हैं। Chala mitrano — सही mount चुनें।
Quick answer
Hold this vertical picture:
- Volume तयार.
- Mount.
- Bind code.
- Compose DB volume.
- Backup.
Language: English · मराठी · हिंदी
Volumes vs binds
Mounts का महत्त्वाचे
MySQL फक्त container layer मध्ये असेल तर docker rm डेटा पुसतो.
Why: Data टिकाऊ; code live edit.
What: Named volumes vs binds.
How: दोन्ही तुलना.
Example 1: Create a named volume
Type this:
command -v docker >/dev/null && docker volume create labdata || printf "%s\n" "labdata (create on your Docker host)"
You will see:
What it means: Named volumes are managed by Docker and survive container deletes.
Example 2: Inspect a volume
Type this:
command -v docker >/dev/null && docker volume inspect labdata || printf "%s\n" "[{\"Name\": \"labdata\", \"Mountpoint\": \"/var/lib/docker/volumes/labdata/_data\"}]"
You will see:
[{"Name": "labdata", "Mountpoint": "/var/lib/docker/volumes/labdata/_data"}]
What it means: Mountpoint is on the Docker host — do not chmod it world-writable.
Example 5: See the difference
Type this:
printf "%s\n" "VOLUME: Docker picks the host path" "BIND: You pick /home/you/project"
You will see:
VOLUME: Docker picks the host path
BIND: You pick /home/you/project
What it means: Interview one-liner used at Infosys.
Concept 1: Named volumes
Docker host path व्यवस्थापित करते.
Why: DB files टिकायला हव्यात.
What: -v NAME:/path
How: MySQL/Postgres.
Example 3: Run with a named volume
Type this:
printf "%s\n" "docker run -d --name volbox -v labdata:/data alpine sleep 3600"
You will see:
docker run -d --name volbox -v labdata:/data alpine sleep 3600
What it means: -v NAME:/path mounts a named volume into the container.
Example 6: Compose volumes block
Type this:
printf "%s\n" "services:" " db:" " image: mysql:8" " volumes:" " - dbdata:/var/lib/mysql" "volumes:" " dbdata:"
You will see:
services:
db:
image: mysql:8
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
What it means: Compose named volume keeps MySQL data across restarts.
Example 8: Data survives container rm
Type this:
printf "%s\n" "docker rm -f volbox" "docker run --rm -v labdata:/data alpine ls /data"
You will see:
docker rm -f volbox
docker run --rm -v labdata:/data alpine ls /data
What it means: Named volume data remains after the container is gone.
Concept 2: Bind mounts
तुम्ही host folder निवडता.
Why: Live reload.
What: -v /host:/container
How: :ro शक्य असेल तर.
Example 4: Bind mount a host folder
Type this:
mkdir -p /tmp/bind-code && printf "%s\n" "hello" > /tmp/bind-code/app.txt && printf "%s\n" "docker run --rm -v /tmp/bind-code:/app:ro alpine cat /app/app.txt"
You will see:
docker run --rm -v /tmp/bind-code:/app:ro alpine cat /app/app.txt
What it means: Bind mount maps a host path; :ro makes it read-only.
Example 7: Compose bind for code
Type this:
printf "%s\n" " volumes:" " - ./src:/app/src"
You will see:
volumes:
- ./src:/app/src
What it means: Relative bind is great for live reload; bad for prod DB files.
Example 9: When binds break
Type this:
printf "%s\n" "Host path missing" "Permission denied on SELinux hosts" "Windows path style mismatches"
You will see:
Host path missing
Permission denied on SELinux hosts
Windows path style mismatches
What it means: Fix path and permissions — do not use world-writable modes.
Concept 3: Breakages
चुकीचा path outage.
Why: volume rm आधी backup.
What: नाव काळजीपूर्वक.
How: Mount card.
Example 10: When volumes break
Type this:
printf "%s\n" "Forgot to declare volume in Compose" "Two stacks share one name by mistake"
You will see:
Forgot to declare volume in Compose
Two stacks share one name by mistake
What it means: Name volumes carefully per environment.
Example 11: Backup habit
Type this:
printf "%s\n" "docker run --rm -v labdata:/data -v /tmp:/backup alpine tar czf /backup/labdata.tgz -C /data ."
You will see:
docker run --rm -v labdata:/data -v /tmp:/backup alpine tar czf /backup/labdata.tgz -C /data .
What it means: Back up named volumes before docker volume rm.
Example 12: Mount card
Type this:
printf "%s\n" "1 DB -> named volume 2 live code -> bind 3 backup volumes 4 never world-writable modes"
You will see:
1 DB -> named volume 2 live code -> bind 3 backup volumes 4 never world-writable modes
What it means: Memorize for Docker Compose interviews.
Mount card
1 DB → volume 2 code → bind 3 backup 4 no world-writable
Suppose: WordPress
dbdata volume.
Suppose: Node laptop
./src bind.
Ravindra Bagale's Tip
WordPress on EC2 labs at TCS: named volume for MySQL data, bind mount only for theme code you edit.
TCS EC2 labs वर WordPress: MySQL data साठी named volume, theme edit साठीच bind mount.
TCS EC2 labs पर WordPress: MySQL data के लिए named volume, theme edit के लिए ही bind mount।
Check yourself (quiz)
Q1. Volume vs bind?
Volume Docker path; bind तुमचा path
Q2. MySQL?
Named volume
Q3. Live code?
Bind
Q4. rm नंतर volume?
होय टिकते
Q5. Compose?
volumes: ब्लॉक
Q6. Backup?
tar helper
Reading tracking
Mark this guide when you finish. Your browser remembers it on this device.
DB → volume. Code → bind.
Did you understand? Let us try it once more.
Frequently asked questions
Volume vs bind mount?
Volume: Docker path. Bind: your host path.
What for databases?
Named volumes.
What for live code?
Bind mounts.
Survive docker rm?
Named volume data yes.
Compose tip?
Top-level volumes: plus service list.
Backup how?
Helper container tar of the volume.