docker 数据卷之进阶篇

2020-06-17 07:16:59易采站长站整理

配置如下:

type 指定挂载方式,我们这里用到的是 volume,其实还可以有 bind 和 tmpfs。
volume-driver 指定挂载数据卷的驱动程序,默认值是 local。
source 指定挂载的源,对于一个命名的数据卷,这里应该指定这个数据卷的名称。在使用时可以写 source,也可以简写为 src。
destination 指定挂载的数据在容器中的路径。在使用时可以写 destination,也可以简写为 dst 或 target。
readonly 指定挂载的数据为只读。
volume-opt 可以指定多次,用来提高更多的 mount 相关的配置。

下面我们看个具体的例子:


$ docker volume create hello
$ docker run -id --mount type=volume,source=hello,target=/world ubuntu /bin/bash

我们创建了名称为 hello 的数据卷,然后把它挂在到容器中的 /world 目录。通过 inspect 命令查看容器的详情中的 “Mounts” 信息可以验证实际的数据卷挂载结果 :

使用 volume driver 把数据存储到其它地方

除了默认的把数据卷中的数据存储在宿主机,docker 还允许我们通过指定 volume driver 的方式把数据卷中的数据存储在其它的地方,比如 Azrue Storge 或 AWS 的 S3。

简单起见,我们接下来的 demo 演示如何通过 vieux/sshfs 驱动把数据卷的存储在其它的主机上。

docker 默认是不安装 vieux/sshfs 插件的,我们可以通过下面的命令进行安装:


$ docker plugin install --grant-all-permissions vieux/sshfs

然后通过 vieux/sshfs 驱动创建数据卷,并指定远程主机的登录用户名、密码和数据存放目录:


docker volume create --driver vieux/sshfs
-o sshcmd=nick@10.32.2.134:/home/nick/sshvolume
-o password=yourpassword
mysshvolume

注意,请确保你指定的远程主机上的挂载点目录是存在的(demo 中是 /home/nick/sshvolume 目录),否则在启动容器时会报错。
最后在启动容器时指定挂载这个数据卷:


docker run -id
--name testcon
--mount type=volume,volume-driver=vieux/sshfs,source=mysshvolume,target=/world
ubuntu /bin/bash

这就搞定了,你在容器中 /world 目录下操作的文件都存储在远程主机的 /home/nick/sshvolume 目录中。进入容器 testcon 然后在 /world 目录中创建一个文件,然后打开远程主机的 /home/nick/sshvolume 目录进行查看,你新建的文件是不是已经出现在那里了!

数据卷原理

下图描述了 docker 容器挂载数据的三种方式: