--- status: stable type: concept tags: - devops - containerization - docker created: 2025-12-17 updated: 2026-05-07 title: Volume - Docker --- # Volume - Docker **Некоторые данные стоит хранить независимо от контейнера, для этого существует понятие Volume.** Стоит так хранить: БД, логи, конфиги, артефакты, настройки, … Для постоянного или персистентного хранения используются Docker Volume. Это буквально монтирование хостовой директории внутрь контейнера, для работы с данными контейнера напрямую. Возможности Docker Volumes: 1. Выгрузка данных контейнера на постоянное хранение 2. Работа в подмонтированных каталогах с интенсивной записью данных 3. Совместное использование данных несколькими контейнерами Docker volumes создают тома, которые монтируются в контейнер. По умолчанию тома docker volumes создаются в каталоге `/var/lib/docker/volumes/` ![](Volume%20-%20Docker_image.png) ## Типы 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": "" } ``` ## Связанные заметки - [[File Permissions]] — uid/gid маппинг в Docker Volumes напрямую зависит от Linux-прав доступа; проблема "владелец root по умолчанию" решается через chmod/chown - [[Active Storage]] — Active Storage в Rails хранит файлы вне БД; в Docker-деплое они должны персистироваться через Volume, иначе теряются при перезапуске контейнера