PassFront
  1. PassFront
  2. База знаний
  3. Контейнеры, volumes и сети

Чем 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.

Другие вопросы раздела