安装本地目录入泊坞容器路径不暴露为体积

问题描述:

是否有任何区别:安装一主机目录到容器路径(路径不暴露为体积)安装本地目录入泊坞容器路径不暴露为体积

  1. ,例如:

docker run -v /host/directory:/container/directory my_image command_to_run

my_imageDockerfile包括VOLUME ["/container/directory"]

  1. 安装一个主机目录成暴露为体积AA容器路径:
  2. docker run -v /host/directory:/container/directory my_image command_to_run

    my_imageDockerfile包括VOLUME ["/container/directory"]

    我知道体积数据持续独立于容器生命周期。但是,由于我想从容器中处理本地数据,因此如果容器内的装入点是一个容量,这是否有所帮助?

开始=>

如果从主机安装到容器中,则没有区别。主机的文件系统将被安装在容器内的该目录的顶部。

列出卷并未将其列在图像中的区别是,当您创建图像而未指定卷时,docker的行为。当在图像上定义音量时,docker将创建一个“匿名”音量,您可以使用docker volume ls作为长uuid字符串看到该音量。这些卷很少用,所以我建议不要在图像中定义一个卷,而只是在您的docker run命令或docker-compose.yml定义中定义它们。在图像中限定容积的

缺点包括:

  1. 在Dockerfile或后裔Dockerfile的后来线可能无法在该位置改变的内容。 Docker对此的行为因场景和版本而异,因此为了可预测性,一旦在映像中定义了卷,我认为该目录不受限制。

  2. 创建匿名卷很难使用,并且可能会混乱文件系统。

我发布了一个blog关于这个话题,而如果你有兴趣了解更多的细节。

+0

嗨,这是一个很好的答案,谢谢。我想谈谈一点。 Afaik在图像级定义一个音量对于该图像产生的数据持久性至关重要。例如。官方的MySQL映像会指定'VOLUME/var/lib/mysql'来保存数据。在像这样的情况下,在'docker run'或者'compose'中定义音量是不可行的。 – luqo33

+0

当数据容器很常见时,使用Docker镜像的'VOLUME'语法。这是避免在'run'或'compose'中定义卷以及数据容器被容器名称与卷名引用的简写。这已被替换为您必须创建运行时的命名卷。没有必要在构建时定义这些目录,在运行时可以将任何目录制作成卷。 – BMitch