Что такое тома (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.