3.6 KiB
status, type, tags, updated, title, created
| status | type | tags | updated | title | created | |
|---|---|---|---|---|---|---|
| stable | concept |
|
2026-02-27 | Volume - Docker | 2025-12-17 |
Volume - Docker
Некоторые данные стоит хранить независимо от контейнера, для этого существует понятие Volume.
Стоит так хранить: БД, логи, конфиги, артефакты, настройки, …
Для постоянного или персистентного хранения используются Docker Volume. Это буквально монтирование хостовой директории внутрь контейнера, для работы с данными контейнера напрямую.
Возможности Docker Volumes:
- Выгрузка данных контейнера на постоянное хранение
- Работа в подмонтированных каталогах с интенсивной записью данных
- Совместное использование данных несколькими контейнерами
Docker volumes создают тома, которые монтируются в контейнер.
По умолчанию тома docker volumes создаются в каталоге /var/lib/docker/volumes/
Типы Volumes
- Host DV:
docker run -v /home/mount/data:/var/lib/mysql/dataПри запуске контейнера, мы пробрасываем конкретный каталог на хосте в конкретный каталог в контейнере (есть опция флагов, для редактирования прав доступа) - Anonymous DV:
docker run -v /var/lib/mysql/dataПри таком подходе, Volume создастся в/var/lib/docker/volumes - 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, иначе теряются при перезапуске контейнера