hostprofi.ru
Подобрать хостинг
Термин·буква V

Volume (Docker)

краткое определение

Volume (Docker) — механизм постоянного хранения данных контейнеров вне слоя union filesystem. Данные в volume сохраняются при остановке и удалении контейнера.

Docker Volume — механизм постоянного хранения данных для Docker-контейнеров. Данные в контейнере эфемерны: при удалении контейнера всё его внутреннее содержимое теряется. Volume — смонтированная директория вне файловой системы контейнера, данные в которой сохраняются независимо от жизненного цикла контейнера.

Типы хранилищ данных в Docker

  • Named Volume: управляется Docker, хранится в /var/lib/docker/volumes/. docker volume create mydata
  • Bind Mount: монтирование конкретной директории хоста. -v /host/path:/container/path
  • tmpfs: хранение в RAM, без сохранения на диск. Для временных данных.

Использование volumes

# Создать volume
docker volume create postgres_data

# Запустить контейнер с volume
docker run -d   --name postgres   -v postgres_data:/var/lib/postgresql/data   -e POSTGRES_PASSWORD=secret   postgres:16

# В docker-compose.yml
services:
  db:
    image: postgres:16
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

# Список volumes
docker volume ls

# Удалить volume
docker volume rm postgres_data

# Удалить все неиспользуемые volumes
docker volume prune

История

Docker Volumes появились в Docker 1.0 (2014). До volumes данные хранились только внутри контейнера или через неудобные механизмы --volumes-from. Docker 1.9 (2015) ввёл named volumes и плагины для хранилищ. Плагины (Volume Drivers) позволяют хранить данные на NFS, AWS EBS, Ceph, GlusterFS — вне локального диска хоста. В Kubernetes аналоги: PersistentVolume (PV) и PersistentVolumeClaim (PVC).

Volumes vs Bind Mount

ПараметрNamed VolumeBind Mount
УправлениеDockerПользователь
Путь на хостеАвтоматическиЯвно указывается
Бэкапdocker volume inspect + cpСтандартные инструменты
ПрименениеБД, продакшн-данныеРазработка (синхронизация кода)
Совместимость с WindowsВысокаяПроблемы с путями

На что обращать внимание

Никогда не храни данные баз данных (PostgreSQL, MySQL) без volume — при пересоздании контейнера данные потеряются. Для бэкапа volume: docker run --rm -v postgres_data:/data -v /backup:/backup alpine tar czf /backup/db.tar.gz /data. В Docker Swarm named volumes локальны для ноды — для общего хранилища нужен NFS-volume driver или внешний storage (Ceph, GlusterFS). В Kubernetes volumes описываются через PersistentVolumeClaim + StorageClass.

История Docker Volumes

Концепция Volume появилась в Docker 1.0 (2013) для решения проблемы эфемерности данных в контейнерах. До Docker 1.9 (2015) volumes были анонимными — при удалении контейнера терялись. Docker 1.9 ввёл именованные volumes (Named Volumes) с независимым жизненным циклом. Docker 1.10 (2016) добавил Volume Plugins — возможность подключать внешние хранилища (NFS, Ceph, GlusterFS). Bind mounts существовали с самого начала Docker, но они зависимы от структуры файловой системы хоста.

Volume vs Bind mount vs tmpfs

ТипДанные хранятсяУправлениеПрименение
Named VolumeУправляется Docker (/var/lib/docker/volumes/)Docker CLIБД, persistent data
Bind mountЛюбой путь хостаОС хостаDev: монтирование кода
tmpfsRAM хостаDocker CLIВременные секреты, кэш

На что обращать внимание

Named Volumes — рекомендуемый способ хранения данных для MySQL, PostgreSQL, Redis в Docker. Данные volumes не удаляются при docker-compose down — только при docker-compose down -v. Бэкап volume: docker run --rm -v myvolume:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz /data. В Docker Swarm Named Volumes локальны для ноды — для shared storage нужен NFS-driver или внешний storage. В Kubernetes volumes описываются через PersistentVolumeClaim + StorageClass.

Другие термины