Создание локального тома (volume) с параметрами монтирования
На этом этапе вы узнаете, как создать локальный том Docker и указать параметры монтирования. Параметры монтирования позволяют контролировать, как файловая система монтируется, например, устанавливать разрешения, включать определенные функции или оптимизировать производительность.
Мы создадим локальный том с именем myvolume3
и используем параметр o
для указания параметров монтирования. В этом примере мы установим параметры uid
и gid
, чтобы убедиться, что файлы, созданные в томе контейнером, принадлежат определенному пользователю и группе на хосте. Это может быть полезно для управления разрешениями при обмене данными между контейнерами и хостом.
Сначала создадим на хосте директорию, которую будем использовать в качестве источника для нашего тома. Это не является строго обязательным для стандартного локального тома, но помогает проиллюстрировать, как параметры монтирования могут повлиять на базовую файловую систему.
mkdir -p ~/project/myvolumedata
Теперь создадим том myvolume3
с использованием драйвера local
и укажем параметр o
с uid
и gid
. Мы будем использовать идентификаторы пользователя и группы текущего пользователя labex
. Вы можете узнать идентификаторы своего пользователя и группы с помощью команд id -u
и id -g
.
USER_ID=$(id -u)
GROUP_ID=$(id -g)
docker volume create --driver local --opt type=none --opt device=/home/labex/project/myvolumedata --opt o=bind,uid=$USER_ID,gid=$GROUP_ID myvolume3
Разберем эту команду:
docker volume create
: Команда для создания тома.
--driver local
: Указывает драйвер тома local
.
--opt type=none
: Указывает, что не нужно автоматически создавать тип файловой системы. Мы привязываемся к существующей директории.
--opt device=/home/labex/project/myvolumedata
: Указывает устройство для монтирования, которое представляет собой директорию, которую мы создали на хосте. Обратите внимание на использование абсолютного пути /home/labex/project/myvolumedata
.
--opt o=bind,uid=$USER_ID,gid=$GROUP_ID
: Передает параметры монтирования.
bind
: Указывает на привязанное монтирование (bind mount), связывающее том с указанным устройством (нашей хост-директорией).
uid=$USER_ID
: Устанавливает идентификатор пользователя для файлов, созданных в томе, равным идентификатору текущего пользователя.
gid=$GROUP_ID
: Устанавливает идентификатор группы для файлов, созданных в томе, равным идентификатору группы текущего пользователя.
myvolume3
: Имя тома.
Вы должны увидеть имя тома, выведенное в консоль.
Теперь проверим параметры этого тома.
docker volume inspect myvolume3
В выводе вы должны увидеть, что Driver
равен local
, а в Options
будут указаны type=none
, device=/home/labex/project/myvolumedata
и o=bind,uid=...,gid=...
(с вашими идентификаторами пользователя и группы). Mountpoint
будет совпадать с путем device
.
Далее запустим контейнер и подключим этот том. Мы будем использовать образ ubuntu
и смонтируем том myvolume3
в /app
внутри контейнера. Затем создадим файл в директории /app
контейнера и проверим его владельца на хосте.
Сначала скачайте образ ubuntu
, если это необходимо.
docker pull ubuntu
Теперь запустим контейнер и создадим файл в смонтированном томе.
docker run --rm -v myvolume3:/app ubuntu bash -c "echo 'Testing ownership' > /app/testfile.txt && ls -l /app/testfile.txt"
Эта команда запускает контейнер ubuntu
, монтирует том myvolume3
в /app
, записывает "Testing ownership" в /app/testfile.txt
, а затем выводит подробности о файле внутри контейнера. Вы должны увидеть, что файл в контейнере имеет владельца root, так как контейнеры обычно запускаются от имени root по умолчанию.
Теперь проверим владельца файла на хост-машине в директории ~/project/myvolumedata
.
ls -l ~/project/myvolumedata/testfile.txt
Вы должны увидеть, что файл testfile.txt
на хосте принадлежит пользователю и группе labex
благодаря параметрам монтирования uid
и gid
, которые мы указали при создании тома.
Наконец, удалим созданную директорию.
rm -rf ~/project/myvolumedata