LINUX.ORG.RU
ФорумAdmin

Не могу понять разницу между volume и bind

 ,


0

1

Добрый день! При монтировании docker volume я могу указать какого он будет типа - volume и bind

При этом я так и не могу понять разницу между ними. А так же не понимаю почему при типа bind он создается от текущего юзера хост-машины, а при volume - от root.

У меня есть 2 volume - БД Postgres и директория с изображениями. Какие для них выбрать типы volume?



Последнее исправление: Andreezy (всего исправлений: 1)

Из мануала:

Bind mounts have been around since the early days of Docker. Bind mounts have limited functionality compared to volumes. When you use a bind mount, a file or directory on the host machine is mounted into a container. The file or directory is referenced by its absolute path on the host machine. By contrast, when you use a volume, a new directory is created within Docker’s storage directory on the host machine, and Docker manages that directory’s contents.

https://docs.docker.com/storage/bind-mounts/

Hanuken
()

У bind больше опций. Можно например настроить так, что если ты в контейнере монтируешь что то в проброшенную папку, то хост тоже будеть видеть файлы.

ox55ff ★★★★★
()

При монтировании docker volume я могу указать какого он будет типа - volume и bind …

При использовании Bind mounts ты явно указываешь конкретную директорию хост системы, которая будет доступна контейнеру. При этом могут возникнуть побочки, поскольку внутри примонтированной директории новые файлы и поддиректории будут иметь идентификаторы контейнерного пользователя и группы. Для последующего удаления такой директории могут потребоваться root-права. С практической точки зрения режим Bind mounts может потребоваться, если необходимо работать с файлами как в контейнере, так и в хост системе - например, пополнять непосредственно в хост-системе набор киких-либо файлов. Естественно, при этом потребуется соответствующая настройка прав доступа к файлам и поддиректориям примонтированной директории.

При использовании Volumes соответствующая директория создается автоматически в системной директории Linux. Добраться до неё можно только в root-режиме, что обычно и не требуется. Это оптимальный режим для хранения баз данных и прочих чисто внутренних контейнерных данных.

Существенная разница между Bind mounts и Volumes проявляется при использовании Docker Desktop и если хостовая операционка - не Linux. В этих случаях контейнеры крутятся внутри специализированной виртуальной Linux-машины. Volumes-директории создаются и хранятся внутри виртуальной машины в её файловой системе, а Bind mounts - в хоствой файловой системе. Соответственно, накладные расходы доступа контейнеров к таким директориям отличаются.

vinvlad ★★
()
Ответ на: комментарий от Andreezy

Ну я вот хочу сделать резервную копию этого volume с БД…

Обычно базы данных бэкапируются с помощью соответствующих утилит, запускаемых внутри контейнера. А вот местом размещения бэкап-файла может быть уже директория, примонтированная в режиме Bind mounts. Путем прямого копирования резервная копия БД может формироваться только при остановленной СУБД-шке! (фактически, для этого нужно остановить соответствующий контейнер)

Кроме того, в docker имеются подкоманды копирования файлов из контейнера в хост-систему и наоборот.

vinvlad ★★
()