docker数据卷
目录一、docker数据卷管理1、bind mount2、docker managed volume二、 convoy卷插件一、docker数据卷管理1、bind mountbind mount 是将主机上的目录或文件mount到容器里。 使用直观高效,易于理解。 使用 -v 选项指定路径,格式 <host path>:<container path>清理实验环境dock
目录
一、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 #启动之后,这个路径就会有sockpwd
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
更多推荐
所有评论(0)