docker数据卷
- 数据卷是目录或文件,不是块设备。
- 容器可以读写volume中的数据。
- volume数据可以持久化保存。
- docker提供了两种卷:bind mount、 docker managed volume
- bind mount
- 是将主机上的目录或文件mount到容器里。
- 使用直观高效,易于理解。
- 使用 -v 选项指定路径,格式 :
- bind mount 默认权限是读写rw,可以在挂载时指定只读ro。
- -v选项指定的路径,如果不存在,挂载时会自动创建。
- docker managed volume
- bind mount必须指定host文件系统路径,限制了移植性。
- docker managed volume 不需要指定mount源。
- 执行docker inspect vm1 可以看到:
- source就是volume在host中的目录,是docker自动为容器生成的目录,如果挂载时指向的已有目录,原有数据会被复制到volume中。
- 因为docker自动为容器生成的volumes目录是一大串数字,特别麻烦,所以我们也可以自己创建volumes文件目录名
- 将上边运行的状态和数据卷都删除
- 运行容器时,直接指定数据卷的目录名称
- 再次将环境还原
- 可以先创建数据卷,然后运行时将数据直接存在该目录下
- 也可以在指定数据卷时,指定挂载权限,默认是rw权限
- bind mount与docker managed volume对比
- 相同点:两者都是 host 文件系统中的某个路径。
- 不同点:
卷插件
-
Docker Plugin :Docker Plugin 是以Web Service的服务运行在每一台Docker Host上的,通过HTTP协议传输RPC风格的JSON数据完成通信。
-
Plugin的启动和停止,并不归Docker管理,Docker Daemon依靠在缺省 路径下查找Unix Socket文件,自动发现可用的插件。
-
当客户端与Daemon交互,使用插件创建数据卷时,Daemon会在后
端找到插件对应的 socket 文件,建立连接并发起相应的API请求,最
终结合Daemon自身的处理完成客户端的请求。 -
使用卷插件
-
convoy卷插件实现: 支持三种运行方式:devicemapper、NFS、EBS。
以下实验使用nfs方式 -
实验前先将之前实验的运行的docker状态删除,将生成的数据卷也删除
-
在所有节点提前挂载NFS存储
-
在server1和server2上下载nfs
-
创建挂载目录:/mnt/nfs
-
server1编辑配置文件,编辑挂在信息
-
查看/mnt/nfs的权限
-
开启nfs和rpcbind
-
查看挂载信息
-
server2上下载nfs并开启rpcbind
-
查看挂载信息
-
挂载
-
同样将server2的Docker环境还原
-
在server2上的/mnt/nfs下创建文件
-
此时在server1的/mnt/nfs/目录下可以看到,实现了同步
-
server1和2上都要安装convoy卷插件
-
创建卷: convoy create vol1
自动生成数据目录:/mnt/nfs/vol1/
-
使用卷:
docker run -it --name vm1 -v vol1:/data --volume-driver=convoy ubuntu
可以在两个主机上同时运行容器,会发现数据目录中的数据是同步的