---
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/`

![](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": "<username>"
}
```