【问题标题】:Difference between VOLUME and RUN mkdir in DockerfileDockerfile 中 VOLUME 和 RUN mkdir 的区别
【发布时间】:2018-03-02 21:18:32
【问题描述】:

看完What is the purpose of VOLUME in Dockerfile之后,我仍然对VOLUME一无所知?

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

VOLUME /my_directory1

行为与

相同
RUN mkdir /my_directory2

当我docker exec -it xxxxxx sh 时,我观察到创建了两个目录/my_directory1/my_directory2

我相信VOLUMEmkdir 更有意义。就是这样,看不懂What is the purpose of VOLUME in Dockerfile

有人可以用一些动手示例用更简单的方式向我解释一下吗?非常感谢

【问题讨论】:

    标签: docker


    【解决方案1】:

    第一件事是你无法将 VOLUMES 与 RUN 命令进行比较,即使在你将它们作为目录获取的情况下也是如此。所以,当你在 Dockerfile 中使用这个命令时,就像,

    VOLUME /my_directory1
    

    这将成为您的卷的位置。而且,您包含的映像将以一种方式编程,当您从它启动一个新容器时它会告诉您,实际创建一个新的卷位置并将其分配给容器中的这个目录。这意味着您放入容器中的任何文件都将比容器寿命长,直到我们手动删除该卷。因此,这是卷需要手动删除的一个区别。你不能仅仅通过移除容器来清理它们。音量命令的全部意义在于说这些数据特别重要,至少比容器本身重要得多。

    您可以通过检查挂载下的容器来验证这一点。

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

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

    另一方面,RUN 命令执行您在容器内指定的指令,并作为每个命令在图像之上创建一个新层。

    RUN mkdir /my_directory2
    

    因此,它会在您的容器内创建目录。但是,如果你删除容器,这个目录也会被删除,本质上是短暂的。

    希望这能澄清这个概念。谢谢。

    【讨论】:

      【解决方案2】:

      VOLUME 命令定义图像上不能取消设置的元数据,指示持久数据将存储在哪里。在定义时,docker 会为卷的初始状态保存目录内容的快照。在图像中创建卷有两个明显的缺点:

      1. 未来对初始卷内容进行更改的能力非常有限/未定义。不会看到此位置卷下图像的更改,任何尝试使用此目录中的内容扩展您的图像的人都将无法使用您的图像。

      2. 任何使用您的映像但未在运行时在同一位置再次明确定义卷的人都会在其docker volume ls 中找到匿名卷,这些卷只是简单的 guid,没有关于创建它们的容器或它们的目录的详细信息甚至用于。请记住,即使未在映像中定义,您也始终可以在运行时定义音量,因此映像中的音量没有任何好处,但您有这些缺点。

      RUN 命令通过创建一个新的文件系统层来更改映像,该层包含来自该命令的文件系统的结果差异。该目录将存在于作为初始容器状态的一部分的图像中。如果您只是希望图像中存在一个目录,那么您应该使用此选项。

      【讨论】:

        猜你喜欢
        • 2016-09-24
        • 1970-01-01
        • 2020-03-09
        • 2017-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多