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 — для разработки и исходного кода.