为什么要用数据卷
docker分层文件系统
性能差
生命周期与容器相同
docker数据卷
绕开分层文件系统
docker提供了两种卷:
bind mount
docker managed volume
bind mount必须指定host文件系统路径,限制了移植性
使用 -v 选项指定路径,格式
docker run -d --name web -v :
/usr/share/nginx是nginx的默认发布目录
bind mount 默认权限是读写rw,可以在挂载时指定只读ro。
不需要指定mount源,docker自动为容器创建数据卷目录
都在 中。
,
docker run -d --name web1 -p 80:80 -v /usr/share/nginx/html nginx
指定数据目录
相同点:两者都是 host 文件系统中的某个路径。
不同点:
docker 卷默认使用的是local类型的驱动,只能存在宿主机,跨主机的volume就需要使用第三方的驱动,
可以查看以下链接:
https://docs.docker.com/engine/extend/legacy_plugins/#volume-plugins
docker官方只提供了卷插件的api,开发者可以根据实际需求定制卷插件驱动。
https://docs.docker.com/engine/extend/plugins_volume/#volume-plugin-protocol
是以Web Service的服务运行在每一台Docker Host上的,通过HTTP协议传输RPC风格的JSON数据完成通信。
Plugin的启动和停止,并不归Docker管理,自动发现可用的插件。
Daemon会最终结合Daemon自身的处理完成客户端的请求。
convoy卷插件实现
支持三种运行方式:devicemapper、NFS、EBS。
以下实验使用nfs方式。
下载软件:
https://github.com/rancher/convoy/releases/download/v0.5.0/
convoy.tar.gz
在所有节点提前挂载NFS存储。
server1 (服务端)
server2测试
server1 和 server2中都要如下操作
可以在两个主机上同时运行容器,会发现数据目录中的数据是同步的。