Docker管理应用,应用要存数据;根据应用的需要,数据空间有可能需要在多个HOST之间被共享,有可能需要支持多种后端存储(Ceph/GlusterFS/EBS/…),还有可能需要对数据空间本身做管理(snapshot/backup/clone…);
上面是应用的需要,再回过头来看看Docker对存储的使用,一个字:mount;
为了把这两头凑起来,简单分类有这样几种方法:
I 编排系统管理存储,将已经规划好的存储空间交给Docker,Docker只管mount就好
II 编排系统只下发存储使用需求,由Docker自己管理存储系统,自己创建卷/mkfs/mount;Docker Volume Plugins属于这种
III 存储作为一种应用服务,应用自己去联系
https://github.com/docker/dock ... ns.md
glusterfs
安装
yum install go
mkdir –p /home/gopath
mkdir –p /home/gopath/src
mkdir –p /home/gopath/bin
mkdir –p /home/gopath/pkg
GOPATH=/home/gopath
export GOPATH
go get github.com/calavera/docker-volume-glusterfs
使用
./docker-volume-glusterfs --servers=172.16.74.24:172.16.74.25
docker run -it --volume-driver glusterfs -v test-vol:/datas/ ubuntu /bin/bash
Trouble shootting
package golang.org/x/net/proxy: unrecognized import path "golang.org/x/net/proxy"
mkdir -p /home/gopath/src/golang.org/x
cd /home/gopath/src/golang.org/x
git clone https://github.com/golang/net
convoy
安装
wget https://github.com/rancher/con ... ar.gz
tar xvf convoy.tar.gz
cp convoy/convoy convoy/convoy-pdata_tools /usr/local/bin/
mkdir -p /etc/docker/plugins/
bash -c 'echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec'
truncate -s 100G data.vol
truncate -s 1G metadata.vol
losetup /dev/loop5 data.vol
losetup /dev/loop6 metadata.vol
使用
convoy daemon --drivers devicemapper --driver-opts dm.datadev=/dev/loop5 --driver-opts dm.metadatadev=/dev/loop6
docker run -v vol-1/data --volume-driver=convoy -it magnum /bin/bash
支持snapshot/backup
其他
convoy目前支持devicemapper、vfs和ebs(s3)
demo: https://asciinema.org/a/9y5nbp ... d%3D2
https://github.com/docker/dock ... pi.md
第一, 试用的两个plugin可以工作,但离成熟还有段距离,比如convoy,可能和两年前的cinder差不多
第二, 有段时间觉得 OpenStack越来越臃肿,Docker和其生态给人扑面而来的小清新;现在想来,可能是因为它还处于发展初期,管的还比较单纯,就像一个少女,柴米油盐没有写在脸上
第三, 个人审美角度,我希望Docker,只把应用打包/部署这一件事做好,把网络和存储的问题交给上层框架去协调;但是现在,Docker本身开始涉足网络、存储,就像少女长大了,要浓妆艳抹。不知道后面会怎样,我们拭目以待吧。