# Тома (volumes) Тома (volumes) – файлы или каталоги, смонтированные на хосте и не являющиеся частью каскадно-объединенной файловой системы. Другие контейнеры могут совместно использовать их, и все изменения будут сразу же фиксироваться в файловой системе хоста. Устаревшее: В качестве точки монтирования можно определить любой другой каталог хоста в команде docker run (например, docker run -d -v /host/dir:/container/dir test/web-server). В Dockerfile bind mounts не работает - а это и не надо делать, т к это определяется при старте образа/через compose. Способы хранения данных: 1. Временное (удаляется при остановке контейнера) 1. по умолчанию изолировано на диске 2. tmpfs в оперативной памяти 2. Постоянное 1. обычные тома Docker 2. bind mounts - прямое монтирование папки в контейнер **Драйвера volumes**
ДрайверОписание
localДрайвер по умолчанию. Только точки монтирования, доступные на хосте.
И еще штук 30 драйверов, [список драйверов](https://docs.docker.com/engine/extend/legacy_plugins/#volume-plugins)
**Управление томами при запуске контейнера из консоли:** Если тома нет - будет создан
Основная командаПараметрОписание
docker run ... --mounttype=Тип тома: - volume - bind - tmpfs
source(src)=Имя тома или не указывается для анонимных
destination(dst)=точка монтирования в контейнере
volume-driver=local по умолчанию, локальный том
volume-opt=опция=значение ```bash volume-opt=type=nfs,volume-opt=device=: ```
readonlyтолько для чтения
docker run ... \--volumes-from ContID связывание с томами контейнера
Пример: ```bash --mount 'type=volume,src=data-volume,dst=/var/opt/project,volume-driver=local,readonly' ``` Без пробелов после запятых. **Создание и управление томами независимо от контейнеров**
Основная командаПараметрОписание
docker volumecreate --name my\_volume create my\_volume Создание тома. /var/lib/docker/volumes/имя тома/\_data - расположение файлов По умолчанию на хосте в каталоге установки Docker (обычно каталог /var/lib/docker/). /var/lib/docker/volumes/
lsместоположение определенных томов, по имени или ID тома.
inspect my\_volumeинформация о томе
rm my\_volumeудаление тома
pruneудаление всех томов, которыми не пользуются контейнерами. Но иногда после удаления контейнера данные не обновляются
docker system prune очистка ресурсов docker. Потом - повторное удаление томов.
**Примеры:**
Автоматическое создание том с именем test-data в /var/lib/docker/volumes/test-data/_data
```bash docker run -ti -d --name alpine-container -v test-data:/var/lib/app/content alpine ```
**Монтирование в другую точку.**
Нужно создать директорию.
```bash mkdir /home/avimanyu/test-data docker run -ti -d --name alpine-container -v /home/avimanyu/test-data:/var/lib/app/content alpine ```
**Архивировать том datavol в dbdata и восстановить его в том dbdata2 контейнера dbstore2** Создание тома datavol в контейнере dbdata
```bash docker run -it --mount 'type=volume,src=datavol,dst=/datavol' --name dbstore ubuntu /bin/bash ```
Создание временного контейнера, примонтирование тома из dbdata, создание тома backup и сохранение архива datavol в backup и удаление временного контейнера
```bash docker run --rm --volumes-from dbstore --mount 'type=volume,src=backup,dst=/backup' --name tmpubn ubuntu tar cvf /backup/backup.tar /datavol ```
Создание тома datavol2 в контейнере dbdata2
```bash docker run -it --mount 'type=volume,src=datavol2,dst=/datavol' --name dbstore2 ubuntu /bin/bash ```
Создание временного контейнера, примонтирование тома из dbstore2, создание тома backup и сохранение архива datavol в backup и удаление временного контейнера
```bash docker run --rm --volumes-from dbstore2 --mount 'type=volume,src=backup,dst=/backup' ubuntu bash -c "cd /datavol && tar xvf /backup/backup.tar --strip 1" ```