Bind mounts и выбор подхода

Монтируем папку с хоста прямо в контейнер и разбираемся, когда выбрать том, а когда bind mount.

Bind mount — прямое монтирование конкретной папки или файла хоста внутрь контейнера; правки видны мгновенно с обеих сторон.

Что такое bind mount

Если том — это хранилище под управлением Docker, то bind mount — это конкретная папка вашей файловой системы, проброшенная в контейнер. Контейнер видит её содержимое, а изменения сразу отражаются и на хосте, и внутри.

Синтаксис

Тот же флаг -v, но слева указывают абсолютный путь на хосте, а не имя тома:

docker run -d --name web \
  -p 8080:80 \
  -v /home/user/site:/usr/share/nginx/html \
  nginx

Здесь папка /home/user/site с хоста монтируется туда, откуда nginx раздаёт статику. Отредактировали файл на хосте — изменения сразу видны в браузере, пересобирать образ не нужно.

Главный сценарий: разработка

Bind mounts незаменимы при локальной разработке: вы монтируете папку с исходным кодом в контейнер, и приложение видит правки на лету (особенно вместе с hot-reload). Не нужно пересобирать образ после каждого изменения строчки.

# Монтируем текущую папку с кодом в контейнер
docker run -d --name dev \
  -p 3000:3000 \
  -v $(pwd):/app \
  my-app:1.0

Том или bind mount — что выбрать

КритерийТом (volume)Bind mount
Кто управляетDockerвы (путь на хосте)
Где данныеслужебная область Dockerконкретная папка хоста
Главный сценарийданные БД, продразработка, исходный код
Переносимостьвысокаязависит от путей хоста

Правило большого пальца: для данных приложения и баз в продакшене — именованные тома; для проброса исходного кода при разработке — bind mounts.

Режим только для чтения

Если контейнер не должен менять смонтированное, добавьте суффикс :ro (read-only):

docker run -d -v /home/user/config:/app/config:ro my-app:1.0

Итог

  • Bind mount монтирует конкретную папку хоста в контейнер; правки видны мгновенно с обеих сторон.
  • Слева у -v путь хоста (для bind mount) или имя тома (для volume).
  • Тома — для данных и прода, bind mounts — для разработки и исходного кода.
Проверьте себя
1. Чем bind mount отличается от именованного тома?
ABind mount работает только в Windows
BBind mount монтирует конкретную папку хоста, а томом управляет сам Docker
CBind mount нельзя редактировать с хоста
DРазницы нет, это синонимы
2. В каком сценарии bind mount особенно удобен?
AДля хранения данных production-базы
BДля локальной разработки, когда нужно видеть правки кода без пересборки
CДля скачивания образов
DДля уменьшения размера образа
3. Что добавляет суффикс :ro в -v /path:/app/config:ro?
AПерезапуск контейнера
BМонтирование только для чтения (read-only)
CСлучайное имя контейнера
DУдаление папки после остановки
Поддержать проект