Gymterview
middle

Что такое тома (volumes) и bind mounts?

Тома и bind mounts — это механизмы Docker для сохранения данных вне жизненного цикла контейнера, поскольку контейнеры по своей природе эфемерны и при удалении все данные внутри теряются.

Тома (Volumes)

Управляемые Docker хранилища данных, расположенные в файловой системе хоста (/var/lib/docker/volumes/):

Пример
# Создать и использовать именованный том
docker run -v postgres-data:/var/lib/postgresql/data postgres:16

# Создать том отдельно
docker volume create my-volume
docker volume ls
docker volume inspect my-volume
docker volume rm my-volume

Bind mounts

Монтирование конкретной директории или файла хоста в контейнер:

Пример
# Монтирование директории хоста
docker run -v /path/on/host:/path/in/container myapp

# Монтирование файла конфигурации
docker run -v ./application.yml:/app/config/application.yml myapp

Сравнение

Характеристика Volumes Bind mounts
Управление Docker управляет расположением Пользователь указывает точный путь
Расположение /var/lib/docker/volumes/ Любая директория хоста
Портативность Высокая (не зависит от файловой системы хоста) Низкая (привязка к структуре хоста)
Использование Данные БД, постоянное хранение Конфиги, исходный код при разработке
Backup Проще через Docker CLI Обычными средствами ОС
Права доступа Docker контролирует Зависят от прав на хосте

Типичные сценарии для Java-разработчика

  • Volume — данные PostgreSQL, данные Elasticsearch, кэш Maven/Gradle
  • Bind mount — application.yml при разработке, исходный код для hot-reload

tmpfs

Третий вид монтирования. Данные хранятся только в оперативной памяти хоста и не записываются на диск. Подходит для временных конфиденциальных данных:

Пример
docker run --tmpfs /app/tmp myapp

На собеседовании: объясните разницу: volumes управляются Docker и подходят для данных БД, bind mounts — для монтирования конфигов и исходного кода при разработке. Упомяните tmpfs как третий вариант для конфиденциальных временных данных. Частая ошибка — путать volumes и bind mounts.