Докер: пытается понять объем в Dockerfile - PullRequest
0 голосов
/ 15 марта 2019

Сначала создайте том sample_vol

docker volume create sample_vol

My Dockerfile

FROM archlinux/base

RUN touch /root/testing  [**edited** find note at RUN below]

# VOLUME sample_vol:/root  [**edited** this will not work, because VOLUME will not accpet named volumes. So this will not mount at /root, it will mount at sample_vol:/root which does not exist]

VOLUME "/root" or VOLUME ["/root"] [**edited** this will create a local mount volume only till the time the container is running. I tried to use named volumes like VOLUME ["name:/root"] but didnt work ]

# RUN touch /root/testing   [**edited** this will not work because volume when mounted will only copy files till it got declared]

build image

docker build -t archlinux/sample_vol .

, проверяющий, создан ли тестовый файл в sample_vol

docker run --rm -it -v=sample_vol:/tmp/myvolume archlinux/base ls /tmp/myvolume 

Не показывается созданный файл тестирования

, тогда как

$ docker run --rm -it --name sample_vol archlinux/sample_vol ls /root/testing

Показывает, что файл testing создан в /root/ образа сборки

Так почему sample_vol не смонтировано на /root, а внутри него создано testing.

Обновление: Причина, которую я обнаружил, может быть вызвана

https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#volume

Изменение громкости из Dockerfile: Если какая-либо сборкаПосле изменения данных в томе после его объявления эти изменения будут отброшены.

1 Ответ

0 голосов
/ 15 марта 2019

Вы неправильно понимаете Docker-Volume.

Docker-Image больше о времени сборки.Docker-Volume полезен только во время выполнения.

Попробуйте выполнить следующие команды, чтобы получить представление:

docker run --rm -it -v=sample_vol:/tmp/myvolume archlinux/base touch /tmp/myvolume/1.txt
docker run --rm -it -v=sample_vol:/tmp/myvolume archlinux/base touch /tmp/myvolume/2.txt
docker run --rm -it -v=sample_vol:/tmp/myvolume archlinux/base touch /tmp/myvolume/3.txt
docker run --rm -it -v=sample_vol:/tmp/myvolume archlinux/base ls -altr  /tmp/myvolume/

1-й контейнер создает файл 1.txt в томе докера, смонтированном в / tmp / myvolumeи затем контейнер удаляется после этой операции.
2-й контейнер создает файл 2.txt в томе докера, смонтированном в / tmp / myvolume, а затем контейнер удаляется после этой операции.
3-й контейнер создает файл 3.txt вТом докера, смонтированный в / tmp / myvolume, а затем контейнер удаляется после этой операции.
Файлы списка 4-го контейнера в томе докера монтируются в / tmp / myvolume, а затем контейнер удаляется после этой операции.

Том Docker предназначен для хранения постоянных данных за пределами жизненного цикла контейнера. Это означает, что при удалении контейнера у вас все еще остаются данные вне контейнера, находящиеся внутри тома.

Так что в следующий раз, если вы создадите контейнер и присоедините этот том докера - вы автоматически получите все данные с новым контейнером.

Рассмотрим пример образа базы данных, в котором вы хотите, чтобы объем данных был таким, чтобы при изменении контейнера на более высокую версию вы получали старые данные в новой базе данных.

...