2017-06-12 100 views
1

我刚刚通过Docker文档阅读,并试图更好地理解Docker数据卷,以至于文档有点模糊。Docker数据卷和挂载到主机

这是我的理解有两种方法可以安装一个码头工人卷:

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

但是,为了在卷里的容器重新启动,甚至换出容器坚持(旧容器被删除,新创建/启动),也不会在在这两种方法中,卷必须安装到主机?!?换句话说,如果我没有通过“简单安装方法”显式安装到主机,那么实际安装的卷在哪里?这个位置如何在容器交换中幸存下来?

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

回答

1

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

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

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

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中,源是指内部的本地目录运行docker的VM。

而这个位置如何在容器换出时幸存下来?

因为它们基于主机的本地目录(因为它们存在,所以它们是卷),所以它们能够存活。

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

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

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