Docker数据卷和挂载到主机

时间:2017-06-12 13:14:22

标签: docker mount docker-volume

我刚刚阅读了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 个答案:

答案 0 :(得分:1)

  

在两种方法中都不会将卷安装到主机上?!

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

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

docker inspect <container-id>
  

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

这样做:

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

您的答案在&#34;来源&#34;:

dt

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

  

这个位置如何在容器换换中存活下来?

他们生存下来是因为他们是基于主人的本地目录(并且他们是卷,因此他们存在)。

  

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

您对简单的音量配置是正确的。这就是docker变得棘手,持久性的地方。您可以在主机文件系统级别实现共享目录,然后在容器中作为卷装入,以便在群集的主机之间获得共享卷。

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