Dockerfile中卷的用途是什么
我正试图深入了解Docker的音量,我很难找出以下方面的差异/用例:Dockerfile中卷的用途是什么,docker,volume,Docker,Volume,我正试图深入了解Docker的音量,我很难找出以下方面的差异/用例: docker卷创建命令 docker运行-v/path:/host\u路径 Dockerfile文件中的VOLUME条目 我特别不明白如果将卷条目与-v标志组合在一起会发生什么情况。卷是存储在/var/lib/docker/volumes/… 您可以在Dockerfile中声明它,这意味着每次从映像启动容器时,都会创建卷(空),即使您没有任何-v选项 您可以在运行时声明它。 结合这两个(VOLUME+docker run
命令docker卷创建
docker运行-v/path:/host\u路径
文件中的Dockerfile
条目VOLUME
我特别不明白如果将
卷
条目与-v
标志组合在一起会发生什么情况。卷是存储在/var/lib/docker/volumes/…
- 您可以在Dockerfile中声明它,这意味着每次从映像启动容器时,都会创建卷(空),即使您没有任何
选项-v
- 您可以在运行时声明它。
结合这两个(
+VOLUME
)意味着您可以将主机文件夹的内容装载到由docker run-v
中的容器保存的卷中/var/lib/docker/volumes/…
- 创建卷而无需定义Dockerfile、生成映像和运行容器。它用于快速允许其他容器装入所述卷
使用docker volume create,很容易将命名卷重新附加到容器
docker volume create --name aname
docker run -v aname:/apath --name acontainer
...
# modify data in /apath
...
docker rm acontainer
# let's mount aname volume again
docker run -v aname:/apath --name acontainer
ls /apath
# you find your data back!
VOLUME
指令与运行时参数中的卷组合在一起时会变得有趣
给定以下Dockerfile:
FROM busybox
VOLUME /myvolume
使用以下内容构建图像:
docker build-t我的bb。
并用以下材料旋转容器:
docker run --rm -it --name my-first-bb my-bb
首先要注意的是,在这个图像中有一个名为myvolume
的文件夹。但这并不特别有趣,因为当我们退出容器时,卷也将被删除
在此文件夹中创建一个空文件,因此在容器中运行以下操作:
cd myvolume
touch hello.txt
现在旋转一个新容器,但与my first bb
共享相同的音量:
docker run --rm -it --volumes-from my-first-bb --name my-second-bb my-bb
您将在myvolume
文件夹中看到mysecond bb
包含文件hello.txt
一旦退出两个容器,卷也将被删除。@radium226
在Dockerfile中指定卷可确保文件夹在运行时被视为卷(即容器外部),而不是容器内部的常规目录。请注意性能和可访问性影响
如果忘记在“docker run”命令行中指定“-v”,则上述情况仍然正确。只是卷名变为匿名。但是仍然有一些方法可以从这些匿名卷访问或恢复数据
假设您将Dockerfile
与VOLUME
一起使用,并使用-v/path:/host\u path/
标志。卷的内容
将被/host\u path/
的内容覆盖?多亏了你@VonC,我想我明白了:)如果你创建一个docker卷--name my\u VOLUME
然后是一个docker run--VOLUME from my\u VOLUME
,你怎么知道挂载点在哪里?@radium226无挂载点(意味着除了本机空/var/lib/docker/volume之外,没有从主机装载任何内容)。卷的路径在my_卷元数据中:我知道主机端没有装入点。但是在使用docker run…
启动的运行容器中,我如何写入存储在my_卷
卷上的文件?我不知道运行容器中卷的…路径,因为我定义了什么都没有?我希望我足够清楚,因为我肯定不确定我的发音:-/@radium226docker卷创建--name aname
创建命名卷:您在运行时分配一个容器路径:docker run-v aname:/apath
:该容器现在有一个附加到它的卷,安装到它的/apath文件夹。我已经重写了回答清楚。相关:卷将被删除,因为它们是匿名卷,并且您使用--rm
选项启动了容器。我认为提到它可能会有用。如果您没有使用--rm
启动容器,您仍然可以使用docker rm-v my contain删除容器及其匿名卷er
。