60 lines
3.6 KiB
Markdown
60 lines
3.6 KiB
Markdown
---
|
||
status: stable
|
||
type: concept
|
||
tags:
|
||
- devops
|
||
updated: 2026-02-27
|
||
title: Volume - Docker
|
||
created: 2025-12-17
|
||
---
|
||
|
||
# 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`
|
||
|
||
```bash
|
||
{
|
||
"userns-remap": "<username>"
|
||
}
|
||
```
|
||
|
||
## Связанные заметки
|
||
- [[File Permissions]] — uid/gid маппинг в Docker Volumes напрямую зависит от Linux-прав доступа; проблема "владелец root по умолчанию" решается через chmod/chown
|
||
- [[Active Storage]] — Active Storage в Rails хранит файлы вне БД; в Docker-деплое они должны персистироваться через Volume, иначе теряются при перезапуске контейнера |