docker(五)-数据卷管理(bind mount、docker manmaged volume)、convoy卷插件

编程入门 行业动态 更新时间:2024-10-28 18:32:05

docker(五)-数据卷管理(bind mount、docker manmaged volume)、convoy卷<a href=https://www.elefans.com/category/jswz/34/1771202.html style=插件"/>

docker(五)-数据卷管理(bind mount、docker manmaged volume)、convoy卷插件

1、 docker 数据卷管理简介

2 、bind mount 挂载方式

[root@server1 ~]# docker rm -f 'docker ps -aq'  删除所有容器
[root@server1 ~]# docker network prune  删除所有没有使用的网络
Are you sure you want to continue? [y/N] y
Deleted Networks:
mynet3
mynet1
mynet2
[root@server1 ~]# mkdir /webdata  创建目录
[root@server1 ~]# docker run -d --name demo -v /webdata:/usr/share/nginx/html nginx  /usr/share/nginx/html 此路经是nginx容器的默认程序发布目录,-V 表示指定挂载路经, /webdata:/usr/share/nginx/html  冒号前面是宿主机路经, 冒号后面是容器路经
[root@server1 webdata]# vim index.html  创建发布页面
www.westos.org 
[root@server1 webdata]# docker ps  
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8ddf1f3fb99f        nginx               "/docker-entrypoint.…"   30 minutes ago      Up 30 minutes       80/tcp              demo      容器以运行
[root@server1 webdata]# 
[root@server1 webdata]# docker inspect 8ddf1f3fb99f    查看容器详细信息


[root@server1 webdata]# curl 172.17.0.2  访问容器
www.westos.org     可以看到nginx默认发布页面内容[root@server1 webdata]# docker exec -it demo bash       docker exec  表示在容器中执行命令
root@8ddf1f3fb99f:/# 
root@8ddf1f3fb99f:/# cd /usr/share/nginx/html/  进入nginx默认发布目录里
root@8ddf1f3fb99f:/usr/share/nginx/html# ls
index.html   
root@8ddf1f3fb99f:/usr/share/nginx/html# cat index.html 
www.westos.org  可以发现这里面的内容就是刚才在宿主机写的内容也可以将容器的配置文件挂载到容器里,从而进行修改配置文件
[root@server1 webdata]# docker rm -f demo  删除之前容器
demo
[root@server1 ~]# cd /webdata/
[root@server1 webdata]# mkdir conf 
[root@server1 webdata]# mkdir html
[root@server1 webdata]# ls
conf  html  index.html
[root@server1 webdata]# mv index.html html/  
[root@server1 webdata]# cd conf/  进入conf目录
[root@server1 conf]# vim www.conf  创建nginx虚拟主机
server {listen       80;server_name  www.westos.org;location / {root /html;    虚拟主机默认发布目录index index.html;}
}
[root@server1 ~]# docker run -d --name demo -v /webdata/html:/html -v /webdata/conf/www.conf:/etc/nginx/conf.d/www.conf:ro -p 80:80 nginx 
-v /webdata/html:/html   冒号后面/html是我们设置的虚拟主机默认发布目录         
www.conf:ro   ro是权限,只读
[root@server1 ~]# docker ps  查看
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
c22949c67c4a        nginx               "/docker-entrypoint.…"   2 minutes ago       Up 2 minutes        80/tcp              demo  容器已经运行
[root@server1 ~]# vim /etc/hosts  在宿主机上添加解析
172.25.50.1   server1  reg.westos.org  www.westos.org
[root@server1 ~]# curl www.westos.org    访问宿主机的80,通过端口映射定向到容器的80
www.westos.org    
[root@server1 ~]# cd /webdata/html/  进入宿主机html目录
[root@server1 html]# vim index.html    修改文件
www.westos.org
www.westos.org
www.westos.org
www.westos.org
[root@server1 html]# curl www.westos.org  访问,容器内的默认发布页面也发生的变化,因为宿主机和容器是相同的
www.westos.org
www.westos.org
www.westos.org
www.westos.org

3、docker 管理卷

docker managed 管理卷有固定位置,必须是此数据卷目录( /var/lib/docker/volumes) 挂接到容器内
[root@server1 volumes]# docker history registry  

[root@server1 volumes]# docker volume create vol1  创建vol1卷
vol1
[root@server1 volumes]# docker run -d --name registry -v vol1:/var/lib/registry  registry      此处也可以不用-V 去指定docker会自动创建数据源目录,var/lib/registry 此路经是registry默认挂载路经

[root@server1 ~]# docker rm -f registry   删除registry容器
registry
[root@server1 ~]# docker run -d --name nginx -v vol1:/usr/share/nginx/html  nginx  再次运行一个nginx容器,不用指定路经,直接写管理卷名字vol1
[root@server1 ~]# cd /var/lib/docker/volumes/
[root@server1 volumes]# ls
metadata.db  vol1
[root@server1 volumes]# cd vol1/
[root@server1 vol1]# ls
_data
[root@server1 vol1]# cd _data/
[root@server1 _data]# ls
50x.html  index.html      有数据,是因为宿主机挂接容器的目录里面有数据,他会拷贝到宿主机数据卷目录里
[root@server1 _data]# docker run -d --name nginx2 -v /web:/usr/share/nginx/html  nginx  再次运行一个容器,用mount方式挂载
[root@server1 ~]# cd /web 
[root@server1 web]# ls   数据为空,  此方式是以宿主机创建的数据卷目录里内容为主,覆盖此数据卷目录

4、卷插件简介


官方提供可选卷插件
卷插件作用:卷插件是用来跨主机存储的
本次实验选用Convoy plugin卷插件

4、1 Convoy 卷插件

[root@server1 ~]# mkdir /mnt/nfs
[root@server1 ~]# vim /etc/exports 

[root@server1 ~]# mkdir /mnt/nfs  创建nfs目录
[root@server1 ~]# vim /etc/exports 
/mnt/nfs             *(rw,no_root_squash)   共享/mnt/nfs目录 ,所有主机具有读写权限 ,no_root_squash表示超级用户挂载不要变更权限
[root@server1 ~]# chmod 777 /mnt/nfs/  给nfs目录所有权限
[root@server1 ~]# yum install nfs-utils  -y  安装nfs安装包
[root@server1 ~]# systemctl start nfs  启动nfs网络文件系统[root@server1 ~]#  showmount -e   显示共享目录列表
Export list for server1:
/mnt/nfs *
在server2上
[root@server2 ~]# mkdir /mnt/nfs[root@server2 ~]# yum install nfs-utils -y    安装nfs
[root@server2 ~]# mount 172.25.50.1:/mnt/nfs/ /mnt/nfs  将server1上的nfs目录挂载到server2的nfs目录上[root@server2 ~]# cd /mnt/nfs/  进入nfs共享目录[root@server2 nfs]# touch file  在nfs目录里创建文件[root@server1 ~]# cd /mnt/nfs/  
[root@server1 nfs]# ls   可以发现server1 上nfs目录也有file文件,是互通的
file
[root@server1 nfs]# rm -fr file  删除,server2nfs目录也没有了
[root@foundation50 isos]# cd /mnt/pub/docker/
[root@foundation50 docker]# scp convoy.tar.gz server1:  将下在好的convoy压缩包拷贝到server1上
[root@server1 ~]# tar zxf convoy.tar.gz   解压
[root@server2 ~]# cd convoy/
[root@server1 convoy]# ls
convoy  convoy-pdata_tools  SHA1SUMS
[root@server1 convoy]# mv convoy* /usr/local/bin/  将两个二进制程序放到/usr/local/bin/目录里,进行全局调用
[root@server1 ~]# mkdir -p /etc/docker/plugins   此路经为缺省的socket文件扫描路经,docker引擎自动会在此路经扫描插件
[root@server1 ~]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &   启动服务
--drivers vfs   表示驱动   -driver-opts 驱动参数   vfs.path 表示指定共享目录
[root@server1 run]# cd convoy/
[root@server1 convoy]# ls
convoy.sock
[root@server1 convoy]# pwd
/var/run/convoy    此路经就是自己的sockt文件路经
[root@server1 convoy]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec    将sockt路经写入到刚才建立的/etc/docker/plugins/目录里convoy.spec文件中在server2上进行同样操作
[root@foundation50 docker]# scp convoy.tar.gz server2:  
[root@server2 ~]# tar zxf convoy.tar.gz
[root@server2 ~]# tar zxf convoy.tar.gz  解压
[root@server2 ~]# cd convoy/
[root@server2 convoy]# mv convoy* /usr/local/bin/
[root@server2 ~]# mkdir -p /etc/docker/plugins
[root@server2 convoy]#  convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &
[root@server2 convoy]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec 测试:
[root@server1 convoy]# convoy --help  相关指令可以--help
[root@server1 convoy]# convoy create vol1  创建卷
[root@server1 convoy]# convoy list   列出卷
{"vol1": {"Name": "vol1","Driver": "vfs","MountPoint": "","CreatedTime": "Sat Feb 26 22:39:01 +0800 2022","DriverInfo": {"Driver": "vfs",
[root@server2 convoy]# convoy list     在server2上也可以列出刚才在server1上建立的卷
{"vol1": {"Name": "vol1","Driver": "vfs","MountPoint": "","CreatedTime": "Sat Feb 26 22:39:01 +0800 2022","DriverInfo": {"Driver": "vfs"
[root@server2 convoy]# convoy create vol2  也可以在server2上创建卷
[root@server1 convoy]# docker volume ls  查看卷信息

[root@server1 convoy]# docker volume rm vol1   删除
[root@server1 convoy]# docker volume rm -f 'docker ps -aq'  删除所有卷
[root@server1 convoy]# docker volume ls  查看卷信息

[root@server1 convoy]# docker run -d --name demo -v vol1:/usr/share/nginx/html nginx    
运行容器,使用管理卷挂载(管理卷不需要写路经,直接写卷名称vol1)
[root@server1 convoy]# docker ps   
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
cb45a25c749f        nginx               "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp              demo 容器已经运行
[root@server1 ~]# cd /mnt/nfs/
[root@server1 nfs]# ls
config  vol1  vol2
[root@server1 nfs]# cd vol1
[root@server1 vol1]# ls
50x.html  index.html    将容器里内容拷贝到创建的vol1卷里
[root@server1 vol1]# vim test.html  重新创建一个文件
[root@server1 vol1]# curl 172.17.0.2/test.html   访问,可以访问
demo手动将server1上的demo容器迁移到server2上
[root@server1 vol1]# docker rm -f demo  删除server1上demo
[root@server2 convoy]# docker run -d --name demo -v vol1:/usr/share/nginx/html nginx  在sever2上运行与server1相同的指令创建demo,相当于迁移了
[root@server2 convoy]# curl 172.17.0.2/test.html 可以发现容器迁移到server2上,数据没有变,还在
demo

如何清除convoy?

[root@server2 convoy]# docker rm -f demo  删除容器
[root@server2 convoy]# docker volume rm vol1  删除卷
[root@server2 convoy]# convoy list  已经删除了
{}
[root@server1 vol1]# convoy list   已经删除了
{}
[root@server2 vol1]# fg  ,将此后台进程退出(ctrl+c)
convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs	(wd: ~)
^CCaught signal interrupt: shutting down.
DEBU[42977] Cleaning up environment...                    pkg=daemon
ERRO[42977] http server erroraccept unix /var/run/convoy/convoy.sock: use of closed network connection  pkg=daemon
[root@server2 vol1]# cd /etc/docker/
[root@server2 docker]# ls
certs.d  daemon.json  key.json  plugins
[root@server2 docker]# cd plugins/
[root@server2 plugins]# ls
convoy.spec
[root@server2 plugins]# rm -fr convoy.spec  删除此文件,不然会加载
[root@server2 plugins]# systemctl stop docker
[root@server2 plugins]# systemctl daemon-reload 
[root@server2 plugins]# systemctl start docker注意:如果不正常删除,会导致缓存信

更多推荐

docker(五)-数据卷管理(bind mount、docker manmaged volume)、convoy卷插件

本文发布于:2023-07-28 19:50:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1292458.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:插件   数据   bind   docker   mount

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!