Dockerfile中VOLUME和RUN mkdir的区别

阅读
What is the purpose of VOLUME in Dockerfile之后,我对VOLUME的内容仍然一无所知?

我的观察是,在Dockerfile中添加以下内容

VOLUME /my_directory1

与…有相同的行为

RUN mkdir /my_directory2

当我停靠exec -it xxxxxx sh时,我观察到2个目录/ my_directory1和/ my_directory2被创建.

我相信VOLUME比mkdir更有意义.就是这样,读完What is the purpose of VOLUME in Dockerfile后我无法理解

有人可以通过一些动手实例向我解释一下吗?非常感谢你

最佳答案 首先,您无法将VOLUMES与RUN命令进行比较,即使在您将这些作为目录的场景中也是如此.所以,当你在Dockerfile中使用这个命令时,

VOLUME /my_directory1

这将成为您的音量的位置.并且,您所包含的图像将按照它从您启动新容器的方式进行编程,实际创建新的卷位置并将其分配给容器中的此目录.这意味着您放入容器中的任何文件都会比容器更长,直到我们手动删除卷.因此,这是卷需要手动删除的一个区别.只需卸下容器就无法清理它们. volume命令的重点是说这个数据特别重要,至少比容器本身重要得多.

您可以通过检查坐骑下的容器来验证.

"Mounts": [
        {
            ....
            "Source": "/var/lib/docker/volumes/bdc5772c2e1e0575d3e2125a15eb46fd7d1690d251568919f0a599a2c53a1044/_data",
            "Destination": "/my_directory1",
            ....
        }
]

这实际上是运行容器在主机上获取它自己的唯一位置,存储该数据,然后它在后台,映射或安装到容器中的该位置,以便容器中的位置认为它写在/ my_directory1位置,但是,它实际上生活在主机上的位置.

另一方面,RUN命令执行您在容器内指定的指令以及在图像顶部创建新图层的每个命令.

RUN mkdir /my_directory2

因此,它会在容器内创建目录.但是,如果删除容器,此目录也会作为短暂删除.

希望这能清除这个概念.谢谢.

点赞