Ravindra BagaleCourses & study guides मराठी Track your progress

Guides

Docker Volumes vs Bind Mounts उदाहरणों के साथ

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.

Quick answer

Hold this vertical picture:

  1. Volume बनाएँ।
  2. Mount।
  3. Bind code।
  4. Compose DB volume।
  5. Backup।

Language: English · मराठी · हिंदी

Container writable layerLost when removed Named volumeDocker-managed path Bind mountHost folder you choose DB dataPrefer named volume Live code editPrefer bind mount
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:

labdata

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.

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.