Чем volume отличается от bind mount в Docker?
Контейнеры, volumes и сети
Volume — управляемое самим Docker хранилище в его собственном каталоге, а bind mount — прямое монтирование произвольного пути с хоста внутрь контейнера.
Сравнение
- Volume: создаётся
docker volume create, живёт в/var/lib/docker/volumes, переживает удаление контейнера, бэкапится штатно и ведёт себя одинаково на любой ОС. - Bind mount:
-v /home/me/code:/app— контейнер видит реальный каталог хоста. Удобно в разработке для горячей перезагрузки кода, но привязывает к структуре ФС конкретной машины.
Когда что выбирать
- Данные базы в проде — именованный volume: Docker управляет жизненным циклом и правами.
- Исходники на ноутбуке разработчика — bind mount.
- Обмен файлами между контейнерами — общий volume.
- Секреты и временные файлы — tmpfs mount: данные только в памяти хоста.
Подводные камни
- Права: uid внутри контейнера может не совпадать с владельцем каталога на хосте.
- На macOS bind mount заметно медленнее из-за прослойки виртуализации.
Коротко для собеседования
Volume хранит данные в области, которой управляет Docker, а bind mount пробрасывает в контейнер конкретный каталог хоста. Для данных БД в проде берут именованный volume, для исходников при разработке — bind mount, помня о расхождении uid и медленной работе на macOS.