Тома (volumes)
Тома (volumes) – файлы или каталоги, смонтированные на хосте и не являющиеся частью каскадно-объединенной файловой системы.
Другие контейнеры могут совместно использовать их, и все изменения будут сразу же фиксироваться в файловой системе хоста.
Устаревшее: В качестве точки монтирования можно определить любой другой каталог хоста в команде docker run (например, docker run -d -v /host/dir:/container/dir test/web-server).
В Dockerfile bind mounts не работает - а это и не надо делать, т к это определяется при старте образа/через compose.
Способы хранения данных:
- Временное (удаляется при остановке контейнера)
- по умолчанию изолировано на диске
- tmpfs в оперативной памяти
- Постоянное
- обычные тома Docker
- bind mounts - прямое монтирование папки в контейнер
Драйвера volumes
Драйвер | Описание |
local | Драйвер по умолчанию. Только точки монтирования, доступные на хосте. |
И еще штук 30 драйверов, список драйверов |
Управление томами при запуске контейнера из консоли:
Если тома нет - будет создан
Основная команда | Параметр | Описание |
docker run ... --mount | type= |
Тип тома:
|
source(src)= | Имя тома или не указывается для анонимных | |
destination(dst)= | точка монтирования в контейнере | |
volume-driver= | local по умолчанию, локальный том | |
volume-opt= |
опция=значение
|
|
readonly | только для чтения | |
docker run ... --volumes-from ContID |
связывание с томами контейнера |
Пример:
--mount 'type=volume,src=data-volume,dst=/var/opt/project,volume-driver=local,readonly'
Без пробелов после запятых.
Создание и управление томами независимо от контейнеров
Основная команда | Параметр | Описание |
docker volume |
create --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. Потом - повторное удаление томов. |
docker run -ti -d --name alpine-container -v test-data:/var/lib/app/content alpine
mkdir /home/avimanyu/test-data
docker run -ti -d --name alpine-container -v /home/avimanyu/test-data:/var/lib/app/content alpine
Создание тома datavol в контейнере dbdata
docker run -it --mount 'type=volume,src=datavol,dst=/datavol' --name dbstore ubuntu /bin/bash
docker run --rm --volumes-from dbstore --mount 'type=volume,src=backup,dst=/backup' --name tmpubn ubuntu tar cvf /backup/backup.tar /datavol
docker run -it --mount 'type=volume,src=datavol2,dst=/datavol' --name dbstore2 ubuntu /bin/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"
No Comments