Dockerfile:了解VOLUME指令

树编码器

让我们举个例子。

以下是VOLUMEnginx图像说明

VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]

这是我的问题:

  1. 当您启动容器时,这些目录会显示在我的主机上吗?当我停止容器时,目录会保留吗?

  2. 如果这些目录中的某些(或全部)目录已经存在于我的主机中,将会发生什么?例如,假设该映像/etc/nginx在容器目录中带有一个默认配置文件,而/etc/nginx我的主机上也有一个配置文件容器启动时,这些文件中的哪一个优先?

  3. -v /host/dir:container/dir之间的主要区别是VOLUME什么?

参考文献:

阿德里安·穆阿特(Adrian Mouat)

容器的卷只是主机上的目录,无论它们是通过什么方法创建的。如果您未在主机上指定目录,则Docker将为该卷创建一个新目录,通常在下/var/lib/docker/vfs

无论创建了卷,都可以使用以下docker inspect命令轻松找到卷在主机上的位置

$ ID=$(docker run -d -v /data debian echo "Data container")
$ docker inspect -f {{.Mounts}} $ID
[{0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951 /var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data /data local  true }]

我们可以看到Docker为该卷创建了一个目录/var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data

您可以从主机随意修改/添加/删除该目录中的文件,但是请注意,您可能需要使用sudo来获得权限。

Docker仅在两种情况下删除卷目录:

  • 如果将--rm选项指定给docker run,则在退出容器时将删除任何卷
  • 如果使用删除了一个容器docker rm -v CONTAINER,则将删除所有卷。

在这两种情况下,仅当没有其他容器引用卷时,才删除卷。映射到特定主机目录(-v HOST_DIR:CON_DIR语法)的卷永远不会被Docker删除。但是,如果删除卷的容器,则命名方案意味着您将很难确定哪个目录包含该卷。

因此,具体问题:

  1. 是的,是的,上面有一些警告。
  2. 每个Docker托管卷在主机上都有一个新目录
  3. VOLUME指令与-v未指定主机目录相同指定主机目录后,Docker不会为该卷创建任何目录,也不会从映像中复制文件,并且永远不会删除该卷(docker rm -v CONTAINER不会删除映射到用户指定主机目录的卷)。

此处的更多信息:

http://container-solutions.com/2014/12/understanding-volumes-docker/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章