docker数据卷:数据卷管理和convoy卷插件

本文详细介绍了Docker数据卷的管理和使用,包括数据卷的重要性、类型及其对比,重点阐述了bind mount和Docker managed volume的区别。同时,深入探讨了卷插件的概念,并以convoy卷插件为例,演示了如何通过NFS实现数据的跨主机共享,确保数据持久性和可移植性。

一、 docker数据卷管理

1. 为什么要用数据卷

在这里插入图片描述

2. docker提供两种卷

在这里插入图片描述

[root@server1 ~]# docker network prune 将不用的网络清除掉
[root@server1 ~]# docker run -d --name vm1 -v /opt/website:/usr/share/nginx/html nginx
56cb4e323a20c34dbd36b23d73647e7f83324f5bad83752796e6c91e724f0cf9

[root@server1 website]# curl 172.17.0.2
/opt/website

在这里插入图片描述
在这里插入图片描述

[root@server1 docker]# docker run -d --name registry registry
fc4dd2676bc25ad2db56daf04b867f332383295ec3cc82cd84dd65d5f2cd1d2f

[root@server1 volumes]# ls
b3d8a5831c678f8bd94d72f59ed76adb41c3f7c701e8767cb1a890ae66ef7986  metadata.db

通过docker volume可以将容器内的内容复制到挂载点
[root@server1 _data]# docker run -d --name vm2 -v /usr/share/nginx/html nginx
e6941d7e4ec13979bb10a62a31c707bed2f981d51f99cabf370fc772259c6fa3
[root@server1 3117caa56a6c78ac79f7b94ed441ce19d08b5ffd69cd0bd22ef1189b017c3eae]# cd _data/
[root@server1 _data]# ls
50x.html  index.html

3. bind mount 和docker managed volume对比

相同点:两者都是host文件系统中的某个路径

不同点:
在这里插入图片描述

二、卷插件简介

在这里插入图片描述
在这里插入图片描述

三、convoy卷插件

1. 支持三种运行方式:devicemapper,NFS,EBS。

以下实验使用nfs的方式。
下载软件:
https://github.com/rancher/convoy/releases/download/v0.5.0/convoy.tar.gz
在所有节点提前挂载NFS存储

2. convoy卷插件安装
[root@server1 ~]# yum install -y nfs-utils
[root@server2 ~]# yum install -y nfs-utils

[root@server1 ~]# systemctl start rpcbind
[root@server2 ~]# systemctl start rpcbind

同步nfs
[root@server1 ~]# cat /etc/exports
/nfs 	*(rw)
[root@server1 ~]# systemctl start nfs
[root@server1 ~]# showmount -e
Export list for server1:
/nfs *
[root@server1 /]# mkdir /nfs

[root@server2 ~]# mkdir /nfs
[root@server2 ~]# showmount -e server1
Export list for server1:
/nfs *
[root@server2 ~]# mount 172.25.60.1:/nfs/ /nfs/
[root@server2 ~]# df
Filesystem            1K-blocks    Used Available Use% Mounted on
172.25.60.1:/nfs       17811456 2572160  15239296  15% /nfs

[root@server1 /]# cat /etc/exports  因为server2使用的时nfsnobody的身份,无法操作nfs挂载目录中的数据,所以将其改为no_root_squash
/nfs 	*(rw,no_root_squash)  
[root@server1 /]# exportfs -rv
exporting *:/nfs

server2可以读写nfs挂载点
[root@server1 /]# cd /nfs/
[root@server1 nfs]# echo hello > test
[root@server2 ~]# cd /nfs/
[root@server2 nfs]# ls
test
[root@server2 nfs]# rm -fr test

docker通过卷插件(plugins)访问nfs
[root@server1 ~]# tar zxf convoy.tar.gz 
[root@server1 ~]# cd convoy/
[root@server1 convoy]# ls
convoy  convoy-pdata_tools  SHA1SUMS
[root@server1 convoy]# mv * /usr/local/bin/
[root@server1 ~]# which convoy
/usr/local/bin/convoy

[root@server2 ~]# tar -vzxf convoy.tar.gz 
convoy/
convoy/convoy-pdata_tools
convoy/convoy
convoy/SHA1SUMS
[root@server2 ~]# cd convoy/
[root@server2 convoy]# mv * /usr/local/bin/
[root@server2 convoy]# which convoy
/usr/local/bin/convoy
[root@server1 ~]# mkdir -p /etc/docker/plugins/  
/etc/docker时docker缺省的一个扫描路径
[root@server2 convoy]# mkdir -p /etc/docker/plugins/

将convoy打入后台
[root@server1 ~]# convoy daemon --drivers vfs --driver-opts vfs.path=/nfs &

[root@server1 nfs]# ll /run/convoy/convoy.sock 
srwxr-xr-x 1 root root 0 Apr  9 22:21 /run/convoy/convoy.sock

[root@server1 nfs]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec

[root@server2 convoy]# convoy daemon --drivers vfs --driver-opts vfs.path=/nfs &
[root@server2 convoy]# ll /run/convoy/convoy.sock
srwxr-xr-x 1 root root 0 Apr  9 22:26 /run/convoy/convoy.sock
[root@server2 convoy]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec

创建卷
[root@server1 nfs]# convoy create vol1
[root@server1 nfs]# ls
config  vol1

[root@server1 nfs]# convoy list
{
	"vol1": {
		"Name": "vol1",
		"Driver": "vfs",
		"MountPoint": "",
		"CreatedTime": "Thu Apr 09 22:29:04 +0800 2020",
		"DriverInfo": {
			"Driver": "vfs",
			"MountPoint": "",
			"Path": "/nfs/vol1",
			"PrepareForVM": "false",
			"Size": "0",
			"VolumeCreatedAt": "Thu Apr 09 22:29:04 +0800 2020",
			"VolumeName": "vol1"
		},
		"Snapshots": {}
	}
}

[root@server1 nfs]# docker run -d --name vm1 -v vol1:/usr/share/nginx/html nginx
[root@server1 nfs]# ls vol1/
50x.html  index.html

[root@server2 ~]# ls /nfs/vol1/
50x.html  index.html

容器可以销毁但是原来的数据保存在nfx中
[root@server1 nfs]# docker rm -f vm1
[root@server1 nfs]# ls vol1/
50x.html  index.html

数据同步过程:

docker engine --- /etc/docker/plugins/convoy.spec --- /run/convoy/convoy.sock ---api ---vol1 --- server2(同步到其它的节点)
删除卷
[root@server2 ~]# convoy delete vol1

[root@server2 ~]# mv /etc/docker/plugins/convoy.spec /mnt/ 或者直接删掉plugins

kill (convoy服务)
[root@server1 docker]# systemctl daemon-reload 
[root@server2 ~]# systemctl restart docker

docker默认创建的volume在/var/lib/docker/volumes/[root@server2 ~]# docker volume create vol1
vol1
[root@server2 ~]# ls /var/lib/docker/volumes/
metadata.db  vol1

在这里插入图片描述

Java是一种具备卓越性能与广泛平台适应性的高级程序设计语言,最初由Sun Microsystems(现属Oracle公司)的James Gosling及其团队于1995年正式发布。该语言在设计上追求简洁性、稳定性、可移植性以及并发处理能力,同时具备动态执行特性。其核心特征与显著优点可归纳如下: **平台无关性**:遵循“一次编写,随处运行”的理念,Java编写的程序能够在多种操作系统与硬件环境中执行,无需针对不同平台进行修改。这一特性主要依赖于Java虚拟机(JVM)的实现,JVM作为程序与底层系统之间的中间层,负责解释并执行编译后的字节码。 **面向对象范式**:Java全面贯彻面向对象的设计原则,提供对封装、继承、多态等机制的完整支持。这种设计方式有助于构建结构清晰、模块独立的代码,提升软件的可维护性与扩展性。 **并发编程支持**:语言层面集成了多线程处理能力,允许开发者构建能够同时执行多项任务的应用程序。这一特性尤其适用于需要高并发处理的场景,例如服务器端软件、网络服务及大规模分布式系统。 **自动内存管理**:通过内置的垃圾回收机制,Java运行时环境能够自动识别并释放不再使用的对象所占用的内存空间。这不仅降低了开发者在内存管理方面的工作负担,也有效减少了因手动管理内存可能引发的内存泄漏问题。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值