目录

一、docker数据卷管理

1、bind mount

​2、docker managed volume

二、 convoy卷插件


一、docker数据卷管理

1、bind mount

 bind mount 是将主机上的目录或文件mount到容器里。 使用直观高效,易于理解。 使用 -v 选项指定路径,格式 <host path>:<container path>

清理实验环境

docker network prune
docker ps
docker rm -f demo1
docker rm -f sad_pike
docker network ls
docker network prune

docker run --rm -it -v /data1:/data1 busybox ##-v 是指定将宿主机的/data1挂接到容器内的/data1,再容器内建立文件
cd /data1 在宿主机的/data1中也可以看到
ls
docker history registry:latest #卷的位置已经确定
docker ps
docker attach mystifying_chaum
docker ps -a
docker run --rm -it -v /data1:/data1 -v /data2:/data2:ro -v /etc/yum.repos.d/dvd.repo:/dvd.repo:ro busybox  #-v可以指定多个,也可控制权限【宿主机的目录可以不用创建,会自动创建,默认情况下权限是读写】

在/data2中不能创建只有只读权限。dvd.repo不能删除

2、docker managed volume

 只能支持目录的挂载,不能支持文件的挂载

 docker volume ls
docker volume prune

docker run -d --name demo nginx ##运行dmeo
docker ps
docker volume ls #没有产生卷信息
docker history nginx:latest ##容器没有自动创建卷,因为容器没有定义卷的挂载

docker rm -f demo
docker run -d --name demo registry ##运行registry
docker volume ls ##产生卷信息
docker inspect demo ##可以看到容器内卷的位置

docker rm -f demo
docker volume prune
 docker volume create vol1 ##创建卷vol1
docker inspect vol1 ##查看卷的路径
cd /var/lib/docker/volumes/vol1/_data ##目录为容器内的目录
ls
 pwd

docker run -d --name demo -v vol1:/var/lib/registry registry ##将docker管理卷vol1挂到/var/lib/registry,不用指定绝对路径,系统会自动识别
docker inspect demo
docker inspect volume vol1##查看卷的信息
cd
docker ps -a
docker rm -f demo

cd
docker ps -a
docker rm -f demo
docker run -d --name demo -v vol1:/usr/share/nginx/html nginx ##将卷vol1挂到nginx 中
cd /var/lib/docker/volumes/vol1/_data #可以看到出现两个文件,这两个文件是容器内的挂载路径
【因为docker管理卷是空的,docker管理卷在挂载的时候要是原有目录是空的时候,
所覆盖的是容器内的路径,他会把原有容器内的数据复制出来】

ls
docker exec -it demo bash 进入容器看到/usr/share/nginx/html nginx的内容复制到卷中
docker rm -f demo
docker run -d --name demo -v /data1:/usr/share/nginx/html nginx ##用bind mount方式挂载到容器目录下
cd /data1 #看到之前创建的文件
ls
docker exec -it demo bash ##进入容器内看到目录底下内容被覆盖

以宿主机路径为主,bind mount方式会直接覆盖 ,docker 管理卷不会

bind mount与docker managed volume对比

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

不同点:

二、 convoy卷插件

 convoy list        列出卷

convoy delete        删除卷

convoy snapshot create    创建快照

convoy snapshot delete    删除快照

convoy backup create        创建备份

convoy create res1 --backup <url>        还原备份

docker ps
docker rm -f demo 
docker volume  prune 

mkdir /nfsshare #创建共享目录
cd /nfsshare
ls
pwd
yum install -y nfs-utils
chmod 777 /nfsshare/
vim /etc/exports ##访客以root用户访问NFS服务端时,被映射为root用户。以其他用户访问时同样映射为对应uid的用户,因为no_all_squash是默认选项。

/nfsshare       *(rw,no_root_squash)  #路径由自己指定读写,不转换身份

systemctl enable --now nfs ##设置开机自启动
showmount -e ##在nfs服务端本机查看共享目录
 ls
touch file1 ##建立文件
 ls

在客户端docker2中

mkdir /nfsshare ##同样建立共享目录
yum install -y nfs-utils
showmount -e 172.25.254.1 ##使用showmount 加服务器IP查看共享情况
mount 172.25.254.1:/nfsshare/ /nfsshare/ ##挂载
df 查看挂载情况

在服务端docker1的/nfsshare中建立文件在客户端也能看到

真机中:convoy-v0.5.2.tar.gz传给server1 

 tar axf convoy-v0.5.2.tar.gz ##解压
cd convoy/
 ls
cp convoy convoy-pdata_tools  /usr/local/bin/ #将可执行文件添加到PATH路径:在环境变量中也可以调用
cd /usr/local/bin/
 ll
mkdir -p /etc/docker/plugins/  ##创建插件配置文件目录
cd /etc/docker/plugins/
ls
echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec #创建Convoy插件配置文件
cat /etc/docker/plugins/convoy.spec
convoy daemon --drivers vfs --driver-opts vfs.path=/nfsshare & #启动convoy插件,驱动是vfs,定义vfs的输出路径

ps ax #查看进程
cd /var/run/convoy/
 ll   #启动之后,这个路径就会有sock

pwd

convoy-v0.5.2.tar.gz传给docker2

tar zxf convoy-v0.5.2.tar.gz
cd convoy/
 ls
cp convoy convoy-pdata_tools /usr/local/bin/
cd
which convoy
df ##查看挂载信息
mkdir -p /etc/docker/plugins/
echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec
convoy daemon --drivers vfs --driver-opts vfs.path=/nfsshare &
ps ax
cd /var/run/convoy/
 ls
ll

convoy create vol1 ##创建卷vol1
convoy list  ##查看系统中所有卷
cd
cd /nfsshare ##创建的卷在此目录下
ls
docker volume ls ##也可以查看卷

 convoy list
docker volume ls
docker volume --help
docker volume create -d convoy vol2 ##创建卷vol2,定义驱动为convoy
 ls

在客户端docker2中也可以 vol1的信息数据同步

cd /nfsshare
ls 看到创建的卷
docker volume ls ##docker volume 也可以查看卷信息
 docker run -d --name dmeo -v vol1:/usr/share/nginx/html nginx #将卷挂到容器内
docker ps
docker inspect dmeo ##查看容器信息
curl 172.17.0.2可以访问到nginx发布页
cd /nfsshare/
 ls
cd vol1
 ls
echo www.westos.org > index.html ##修改发布页
curl 172.17.0.2

 当服务端容器故障之后重新运行在客户端,数据依旧会保留

docker run -d --name dmeo -v vol1:/usr/share/nginx/html nginx##将卷挂到容器内
docker ps
curl 172.17.0.2 ##可以看到之前修改的发布页
systemctl status docker 

回收卷: 客户端

docker rm -f dmeo ##先删除容器
docker volume ls ##再回收卷
docker volume rm vol2
docker volume rm vol1
docker ps
docker volume ls
convoy list
fg  因为convoy没有提供停止守护进程的功能 ,调回前端结束
ps ax
 cd /etc/docker/
ls
 cd plugins/
 ls
 rm -f convoy.spec ##删除插件
systemctl restart docker##重启docker 速度会很快

回收卷:服务端

docker ps
docker volume ls
fg
cd /etc/docker/
ls
cd plugins/
ls
 rm -fr convoy.spec
 ls
systemctl restart docker
cd /var/lib/docker/volumes/
ls
rm -rf metadata.db
systemctl restart docker

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐