一、driver介绍
任何一个 data volume都是由driver管理的.创建volume时如果不特别指定 将使用local类型的driver,即从Docker Host的本地目录中分配存储空间。
如果要支持跨主机的volume,则需要使用第三方 driver.目前已经有很多可用的 driver,比如使用Azure File Storage的driver,
使用GlusterFS的driver,完整的列表可参考 https://docs.docker.eom/engine/extend/legacy-plugins/#volumiplugins Rgx・Ray drive:
1.Rex-Ray是开源的'而且社区活跃。
2.支持多种 backend, VirtualBox 的 Virtual Media、Amazon EBSX Ceph RBDV OpenStack Cinder 等。
3.支持多种操作系统,Ubuntu. CentOSs RHEL 和 CoreOSe
4.支持多种容器编排引擎,Docker Swarm Kubernetes和Mgsos。
5. Rex-Ray安装使用方法非常简单。
二、安装部署
1.安装配置rex-ray
Rex-Ray以standalone进程的方式运行在Docker主机上,安装方法很简单,
在需要使用Rex-Ray driver的主机dockerl和 docker2上运行如下命令:
curl -sSL https://dl.bintray.com/rexray/rexray/install |sh
创建编辑rex-ray的配置文件 /etc/rexray/config.yml,可以使用图形化的在线rex-ray配置生成器
或者 curl ・sSL https://rexray.io/install | sh -
配置文件内容:
1 •使用VirtualBox的Virtual Media作为backendz提供data volume
原因是我们的实验环境就是用的VirtualBox,不需要额外部署存储系统,作为验证和实践,已经足够了。如果是生产系统,选择更健壮的backend, 比如:Ceph RBD。
2.http://192.168.0.5:18083 是 VirtualBox 宿主机的服务端口。
3.volumePath 是 VirtualBox 宿主机上存放 data volume 的目录。
4.SATA是controller的名字.不用修改。
2.配置virtuaibox backend
在 VirtualBox 宿主机.启动 vboxwebsrv 服务: vboxwebsrx^ -H 0.0.0.0
执行如下命令关闭 VirtualBox 的登录认证:VBoxManage setproperty websrvauthlibrary null
VBoxManage setproperty websrvauthlibrary null
关机状态修改虚拟机docker1和docker2的storage配置,删除IDE controller
3.重启rex-ray服务:
systemctl restart rexray (重启服务)
rexray volume ls (查看rex-ray是否正常工作)
可能会发生查看显示不到,从新加载下主机网页就可以了
4.使用rex-ray volume
创建和使用Rex-Ray volumeo,在docker1或docker2上执行创建命令
docker volume create --driver rexray --name=mysqldata --opt=size=2
volume mysqldata创建成功,大小为2GB 在VirtualBox宿主机中也能看到mysqldata
因为VirtualBox使用的是thin-provisioning, volume初始分配的空间很小。接下来我们将:
•在dokcerl上启动MySQL容器mydby_on_docker1,并使用mysqldata作为数据卷。
•更新数据库,然后销毁mydb_on_docker1
.在docker2上启动mysql容器mydb_on_docker2,也使用mysqldata作为数据卷。然后验证数据有效性。
5.创建容器并使用数据卷
docker run -dit --name mysql1 -v mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
在数据中创建数据
docker exec -it mysql1 sh (进入数据库)
mysql -uroot -p123456 (连接数据库)
create database test;
use test;
create table test(id int,name varchar(20));
insert into mysql values(1,"aaa");
insert into mysql values(2,"bbb");
6.删除容器
docker rm -f mysql1
7.docker2上创建新的容器
docker run -dit --name mysql2 -v mysqldata:/var/lib/mysql mysql:5.7
docker exec -it mysql2 sh
新容器也使用相同的卷mysqldata,不过这次不需要指走环境变量MYSQL_ROOT_PASSWORDf因为密码已经保存到 mysqldata 里面了。现在 Rex-Ray volume mysqldata 已经挂载到 docker2:
1.进入到容器mydb_on_docker
2登录数据库,密码与mydb_on_docker1 —致。
3.切换到数据库mysql。
4.确认之 前由mydb_on_docker1创建的表和写入的数据完好无损。
Rex-Ray可以提供鍔主机的volume,其生命周期不依赖Docker Host和容器,是stateful容器理想的数据存储方式。
如何使用其他storage provider的volume driver,部署和配置storage provider会有所不同,
不过Docker在使用volume的方 式都是一样的:通过docker volume create -driver创建volume。创建容器时用-v指走上一步创建的volume.