Я пытаюсь глубже понять объем Docker, и мне трудно понять различия / варианты использования:
docker volume create
команда- В
docker run -v /path:/host_path
VOLUME
Запись вDockerfile
файл
Я особенно не понимаю, что произойдет, если объединить VOLUME
запись с -v
флагом.
Ответы:
Том - это постоянные данные, хранящиеся в
/var/lib/docker/volumes/...
Вы можете объявить его в файле Dockerfile, что означает, что каждый раз, когда контейнер запускается из образа, том создается ( пустой ), даже если у вас нет никакой
-v
возможности.Вы можете объявить это во время выполнения
docker run -v [host-dir:]container-dir
.объединение двух (
VOLUME
+docker run -v
) означает, что вы можете смонтировать содержимое папки хоста в свой том, сохраняемый контейнером в/var/lib/docker/volumes/...
docker volume create создает том без необходимости определять Dockerfile, создавать образ и запускать контейнер. Он используется для быстрой установки указанного тома в другие контейнеры.
Если вы сохранили какое-то содержимое в томе, но с тех пор удалили контейнер (который по умолчанию не удаляет связанный с ним том, если вы не используете docker rm -v), вы можете повторно присоединить указанный том к новому контейнеру (объявив такой же объем).
См. « Docker - Как получить доступ к тому, не прикрепленному к контейнеру? ».
С помощью docker volume create легко повторно прикрепить именованный том к контейнеру.
источник
Dockerfile
withVOLUME
и-v /path:/host_path/
флаг. СодержимоеVOLUME
будет заменено содержимым/host_path/
?docker volume create --name my_volume
за которым следует adocker run --volume-from my_volume
, как узнать, где будет точка монтирования?docker run ...
как я могу записать в файл, хранящийся наmy_volume
томе, в запущенном контейнере ? Я не знаю ... пути? объема внутри моего работающего контейнера, потому что я ничего не определил? Надеюсь, я достаточно ясен, потому что я определенно не уверен в своем голосе: - /docker volume create --name aname
создает именованный том: вы назначаете путь к контейнеру во время выполнения:: кdocker run -v aname:/apath
этому контейнеру теперь прикреплен том, подключенный к его папке / apath. Я переписал ответ, чтобы прояснить это.VOLUME
инструкция становится интересной, когда вы комбинируете ее сvolumes-from
параметром времени выполнения.Учитывая следующий Dockerfile:
Создайте образ с помощью:
И раскрутите контейнер с:
Первое, что следует заметить, это папка с именем на этом изображении
myvolume
. Но это не особо интересно, так как при выходе из контейнера объем тоже будет удален.Создайте в этой папке пустой файл, поэтому запустите в контейнере следующее:
Теперь разверните новый контейнер, но разделите тот же объем с
my-first-bb
:Вы увидите, что
my-second-bb
файл находитсяhello.txt
вmyvolume
папке.Как только вы выйдете из обоих контейнеров, ваш том также будет удален.
источник
--rm
опцией. Я думаю, упоминание об этом может сработать. Если вы не запускали контейнер с помощью--rm
, вы все равно можете удалить контейнер и его анонимные тома с помощьюdocker rm -v my-container
.