Docker数据卷和挂载到主机

我只是通过Docker文档阅读,并试图更好地理解Docker Data Volumes,这个文档有点模糊。

这是我的理解 ,有两种方法可以安装Docker卷:

  • 简单的装载(例如docker run -it -v /data --name container1 busybox ); 和
  • 挂载到主机(例如docker run -it --name container1 -v /path/on/host:/datavol busybox

但是为了使容量在容器重启甚至容器交换(旧容器被删除,创build/启动新容器)中保持不变,这两种方法都不会将卷挂载到主机上吗? 换句话说,如果我没有通过“简单安装方法”明确地挂载到主机,那么卷的实际安装位​​置在哪里? 而且这个位置如何在容器交换中生存呢?

而且,在这两种情况下,我都假定卷只是给定主机的本地卷,并且如果有一个Swarm或群集运行在多个主机上,则无法使用这些命令,以便在不同主机上运行的容器可以访问这些卷,是吗? (而且我猜这是Data Volume Containers发挥的作用,对吧?)提前致谢!

这两种方法都不能将卷挂载到主机上?

是的,这两种方法都基于容器生命周期中保存的主机目录。

使用这些命令获取更多信息:

 docker volume ls docker volume inspect <volume-id> # and docker inspect <container-id> 

(方法1)实际安装量在哪里?

做这个:

 docker inspect <container-id> 

你的答案在“来源”中:

 "Mounts": [ { "Type": "volume", "Name": "96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001", "Source": "/var/lib/docker/volumes/96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], 

请注意,如果您在OSX或Windows中,则该Source指的是运行docker的VM内部的本地目录。

而且这个位置如何在容器交换中生存呢?

他们生存,因为他们是基于主机的本地目录(他们是卷,因此它们存在)。

如果在多个主机上运行Swarm或群集,则无法使用这些命令,以便运行在不同主机上的容器可以访问这些卷,是的?

您对简单的卷configuration是正确的。 这是docker变得棘手,持久的地方。 您可以在主机文件系统级别实现共享目录,然后将其作为卷装载到容器中,以便跨群集主机获取共享卷。

https://docs.docker.com/engine/tutorials/dockervolumes/#mount-a-shared-storage-volume-as-a-data-volume