Linux Docker容器 convoy插件管理

一、docker数据卷

在这里插入图片描述

bind mount 模式

在这里插入图片描述其中 -v选项指定的路径,如果不存在,挂载时会自动创建,也可指定多个挂载。

bind mount 示例:

[root@server1 ~]# docker run -d --name vm1 -v /opt/website:/usr/share/nginx/html nginx
92684dd0d2e25d8f0f458783e5ca6324f5d775e80df441faca0387eb84f8a59c
[root@server1 ~]# cd /opt/website/
[root@server1 website]# ls

 
 
  • 1
  • 2
  • 3
  • 4

此时访问nginx出现错误:
在这里插入图片描述是因为在发布目录下没有默认发布文件,我们创建发布文件后再次访问:
在这里插入图片描述修改的是宿主机/opt/website/目录下的文件,由于挂载到了容器内nginx的发布目录,因此可以成功访问,修改发布文件再次验证:

在这里插入图片描述默认的挂载都是读写的,也可以指定读写权限挂载:
比如指定只读挂载:

[root@server1 ~]# docker run -it --name vm2 -v /opt/website:/data1 -v /etc/yum.repos.d/docker-ce.repo:/etc/yum.repos.d/docker-ce.repo:ro busyboxplus
/ # cd /etc/yum.repos.d/
/etc/yum.repos.d # ls
docker-ce.repo
/etc/yum.repos.d # vi docker-ce.repo 
/etc/yum.repos.d # echo 1111 >> docker-ce.repo 
/bin/sh: can't create docker-ce.repo: Read-only file system

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

docker managed volume模式

上面讲的bind mount模式必须指定host文件系统路径,限制了移植性,而docker managed volume模式不需要指定mount源,docker自动为容器创建数据卷目录。

默认创建的数据卷目录都在 /var/lib/docker/volumes中。

在这里插入图片描述上图中的不用的volumes可以使用docker volume prune 命令来释放。

如果挂载时指向容器内已有的目录,原有数据会被复制到volumes中。

[root@server1 volumes]# docker run -d --name vm2 -v /usr/share/nginx/html nginx
[root@server1 volumes]# ls
34a310947a04095e60c5d1f6351cac34d39e6c0cbc731817721e0092729c1c95  metadata.db
[root@server1 volumes]# cd 34a310947a04095e60c5d1f6351cac34d39e6c0cbc731817721e0092729c1c95/_data/
[root@server1 _data]# ls
50x.html  index.html

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

bind mount与docker managed volume对比

在这里插入图片描述

二、docker卷插件简介

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

convoy插件部署

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

convoy卷插件安装:
<1>两台主机安装并配置NFS

[root@server1 ~]# yum install -y nfs-utils

 
 
  • 1
[root@server2 ~]# yum install -y nfs-utils

 
 
  • 1

确保以下程序处于运行状态:

[root@server1 ~]#  systemctl start rpcbind

 
 
  • 1
[root@server2 ~]#  systemctl start rpcbind

 
 
  • 1

server1配置:


[root@server1 ~]# vim /etc/exports
[root@server1 ~]# cat /etc/exports
/nfs	*(rw,no_root_squash)				#设置所有用户对该共享目录可读写  no_root_squash参数表示登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限
[root@server1 ~]# systemctl start nfs
[root@server1 ~]# showmount -e
Export list for server1:
/nfs *
[root@server1 ~]# mkdir /nfs			##新建共享目录

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

server2配置:

[root@server2 ~]# mkdir /nfs
[root@server2 ~]# showmount -e server1
Export list for server1:
/nfs *
[root@server2 ~]# mount 172.25.63.1:/nfs/ /nfs/			  ##客户端挂载共享目录
[root@server2 nfs]# echo redhat > file1			   ##测试:客户端172.25.63.2访问目录并建立文件,可写
[root@server2 nfs]# cat file1 
redhat

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在服务端共享目录下面查看客户端创建的文件:

[root@server1 ~]# cd /nfs/
[root@server1 nfs]# ls
file1
[root@server1 nfs]# cat file1 			# 文件已经同步,nfs配置成功
redhat

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

<2>两台主机安装convoy

server1配置:

[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 convoy]# mkdir /etc/docker/plugins
[root@server1 ~]# convoy daemon --drivers vfs --driver-opts vfs.path=/nfs &		#启动Convoy守护进程
[root@server1 ~]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

server2配置:

[root@server2 ~]# tar zxf convoy.tar.gz
[root@server2 ~]# cd convoy
[root@server2 convoy]# cp * /usr/local/bin/
[root@server2 convoy]# mkdir /etc/docker/plugins
[root@server2 convoy]# convoy daemon --drivers vfs --driver-opts vfs.path=/nfs &		#启动Convoy守护进程
[root@server2 convoy]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

第一次运行上面的convoy daemon命令的时候,会在共享目录下生成一个config文件夹,这个文件夹不要删除,不然客户端的convoy命令就会用不了

<3>操作卷

[root@server1 ~]# convoy create vol1      ##创建convoy卷实例
[root@server1 ~]# convoy list           ##查询卷

 
 
  • 1
  • 2
  • 3

在这里插入图片描述
在共享目录内会自动生成一个同名文件夹,在这个卷同名的文件夹内创建文件等,等同于操作卷里面的内容。

[root@server1 vol1]# docker run -d --name vm1 -v vol1:/usr/share/nginx/html nginx
[root@server1 vol1]# ls
50x.html  index.html			#直接输出了容器内的数据
[root@server1 vol1]# echo www.11111.com > index.html 
[root@server1 vol1]# cat index.html 
www.11111.com

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在server2查看是否同步:

[root@server2 convoy]# cd /nfs/vol1/
[root@server2 vol1]# ls
50x.html  index.html
[root@server2 vol1]# cat index.html 
www.11111.com

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

当容器销毁后数据卷还会在。

删除卷:

[root@server1 ~]# docker rm -f vm1 		#首先删除容器
[root@server1 ~]# convoy delete vol1 	#删除卷
[root@server1 ~]# convoy list
{}

 
 
  • 1
  • 2
  • 3
  • 4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值