Files
SecondBrain/90 Library/Containers/Docker/Volume - Docker.md
T
2026-05-31 10:18:48 +03:00

3.6 KiB

status, type, tags, created, updated, aliases
status type tags created updated aliases
stable concept
devops
containerization
docker
2025-12-17 2026-05-07
Volume - Docker

Volume - Docker

Некоторые данные стоит хранить независимо от контейнера, для этого существует понятие Volume.

Стоит так хранить: БД, логи, конфиги, артефакты, настройки, …

Для постоянного или персистентного хранения используются Docker Volume. Это буквально монтирование хостовой директории внутрь контейнера, для работы с данными контейнера напрямую.

Возможности Docker Volumes:

  1. Выгрузка данных контейнера на постоянное хранение
  2. Работа в подмонтированных каталогах с интенсивной записью данных
  3. Совместное использование данных несколькими контейнерами

Docker volumes создают тома, которые монтируются в контейнер. По умолчанию тома docker volumes создаются в каталоге /var/lib/docker/volumes/

Типы Volumes

  1. Host DV: docker run -v /home/mount/data:/var/lib/mysql/data При запуске контейнера, мы пробрасываем конкретный каталог на хосте в конкретный каталог в контейнере (есть опция флагов, для редактирования прав доступа)
  2. Anonymous DV: docker run -v /var/lib/mysql/data При таком подходе, Volume создастся в /var/lib/docker/volumes
  3. Names DV: docker run -v name:/var/lib/mysql/data Аналогично второму варианту, Volume создается в директории по умолчанию, но ему присваивается метка name, которую можно переиспользовать.

Организация Доступа К Файлам В Docker Volumes

По умолчанию, uid/gid внутри контейнера и на хосте идентичны, поэтому владелец/группа и права доступа внутри смонтированного каталога будут эквиванлентны.

Изменить данные поведение поможет фича под названием "userns-remap" - она позволит соотнести uid/gid контейнера к другим uid/gid хоста

Проблема в том, что по умолчанию, в volume владелец root - что не очень хорошо.

Для управления этой фичей, нужно отредактировать конфигурацию по пути /etc/docker/daemon.json 

{
	"userns-remap": "<username>"
}

Связанные заметки

  • File Permissions — uid/gid маппинг в Docker Volumes напрямую зависит от Linux-прав доступа; проблема "владелец root по умолчанию" решается через chmod/chown
  • Active Storage — Active Storage в Rails хранит файлы вне БД; в Docker-деплое они должны персистироваться через Volume, иначе теряются при перезапуске контейнера