Ответ 1
Объемы контейнера - это просто каталоги на хосте, независимо от того, какой метод они создают. Если вы не укажете каталог на хосте, Docker создаст новый каталог для тома, обычно под /var/lib/docker/vfs
.
Однако том был создан, легко найти, где он находится на хосте, используя команду docker inspect
, например:
$ ID=$(docker run -d -v /data debian echo "Data container")
$ docker inspect -f {{.Mounts}} $ID
[{0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951 /var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data /data local true }]
Мы видим, что Docker создал каталог для тома в /var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data
.
Вы можете изменять/добавлять/удалять файлы в этом каталоге с хоста, но обратите внимание, что для разрешений вам может понадобиться sudo
.
Docker будет удалять только каталоги томов в двух случаях:
- Если опция
--rm
указана наdocker run
, все тома будут удалены, когда контейнер выйдет из - Если контейнер удален с помощью
docker rm -v CONTAINER
, все тома будут удалены.
В обоих случаях тома будут удаляться только в том случае, если к ним не относятся другие контейнеры. Объемы, сопоставленные определенным каталогам хоста (синтаксис -v HOST_DIR:CON_DIR
), никогда не удаляются Docker. Однако, если вы удалите контейнер для тома, схема именования означает, что вам будет трудно определить, какая директория содержит том.
Итак, конкретные вопросы:
- Да и да, с вышеописанными оговорками.
- Каждый управляемый том Docker получает новый каталог на хосте
- Инструкция
VOLUME
идентична-v
без указания ведущего каталога. Когда указатель хоста указан, Docker не создает никаких каталогов для тома, не копирует файлы из образа и никогда не удалит том (docker rm -v CONTAINER
не удаляет тома, сопоставленные указанным в указателе каталогам хоста).
Дополнительная информация здесь:
http://container-solutions.com/2014/12/understanding-volumes-docker/