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

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

大家好,我是讯享网,很高兴认识大家。

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 注意:如果不正常删除,会导致缓存信 
小讯
上一篇 2025-01-13 16:20
下一篇 2025-03-08 11:31

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/24560.html