docker19.03使用数据卷
一,查看当前的docker版本
[root@localhost data]# docker --version Docker version 19.03.8, build afacb8b
说明:刘宏缔的架构森林是一个专注架构的博客,
网站:https://blog.imgtouch.com
本文: https://blog.imgtouch.com/index.php/2023/05/21/docker-shi-yong-shu-ju-juan-docker1903/
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,查看当前的数据卷
使用 docker volume ls 命令
[root@localhost data]# docker volume ls DRIVER VOLUME NAME
三,创建一个数据卷,名字叫 zk-vol
使用 docker volume create 命令
[root@localhost data]# docker volume create zk-vol zk-vol [root@localhost data]# docker volume ls DRIVER VOLUME NAME local zk-vol
四,查看数据卷的详细信息
使用 docker volume inspect 命令
[root@localhost data]# docker volume inspect zk-vol [ { "CreatedAt": "2020-03-18T15:46:47+08:00", "Driver": "local", "Labels": {}, "Mountpoint": "/data/docker/volumes/zk-vol/_data", "Name": "zk-vol", "Options": {}, "Scope": "local" } ]
说明:注意Mountpoint所标识的目录是volume在宿主机上的目录
五,运行一个容器,挂载我们所创建的数据卷:
1,我们在/data/docker/volumes/zk-vol/_data目录下创建一个文件a.txt,
内容是aaa
[root@localhost data]# cd /data/docker/volumes/zk-vol/_data [root@localhost _data]# vi a.txt
2,启动后查看数据卷
[root@localhost _data]# docker run --name testvol --privileged --hostname=testvol -itd --mount src=zk-vol,dst=/data/zk-vol centos /usr/sbin/init 6f2272f22ac708276bba0a26aeb0b3e04dd9dba308d1c07b9527fa28da1ef756 [root@localhost _data]# docker exec -it testvol /bin/bash [root@testvol /]# cd /data/zk-vol/ [root@testvol zk-vol]# more a.txt aaa
说明:也可以使用 -v参数进行挂载:
[root@localhost _data]# docker run --name testvol --privileged --hostname=testvol -itd -v zk-vol:/data/zk-vol centos /usr/sbin/init
六,删除数据卷:
使用 docker volume rm 命令
[root@localhost _data]# docker volume ls DRIVER VOLUME NAME local logs local logs2 local zk-vol [root@localhost _data]# docker volume rm logs logs [root@localhost _data]# docker volume rm logs2 logs2 [root@localhost _data]# docker volume ls DRIVER VOLUME NAME local zk-vol
七,容器数据卷:新运行一个容器,挂载三个目录或文件:
[root@localhost docker]# docker run -itd --name dbvolume --hostname dbvolume -v /etc/localtime:/etc/localtime -v /data/nfs:/data/nfs -v /data/rsync:/data/rsync centos:latest 56efd12b38ab3d5b65606782b8800a027b4aad594045f1500a3b3d440ce4d756
命名为: dbvolume
八,在宿主机中查看与容器数据卷dbvolume挂载相关的信息:
[root@localhost docker]# docker inspect dbvolume
其中:
HostConfig下面的Binds保存有挂载信息
"HostConfig": { "Binds": [ "/etc/localtime:/etc/localtime", "/data/nfs:/data/nfs", "/data/rsync:/data/rsync" ],
Mounts下面也有这三个挂载目录的信息
"Mounts": [ { "Type": "bind", "Source": "/data/rsync", "Destination": "/data/rsync", "Mode": "", "RW": true, "Propagation": "rprivate" }, { "Type": "bind", "Source": "/etc/localtime", "Destination": "/etc/localtime", "Mode": "", "RW": true, "Propagation": "rprivate" }, { "Type": "bind", "Source": "/data/nfs", "Destination": "/data/nfs", "Mode": "", "RW": true, "Propagation": "rprivate" } ],
九,新启动另一个容器usevolume,并挂载容器数据卷:
[root@localhost docker]# docker run --hostname usevolume --name usevolume --volumes-from dbvolume -itd --privileged centos:latest /usr/sbin/init 57926ab056fcbcb8b679bf167bcf5fd9368a4f958445ffb84c3bccc474013441
说明:--volumes-from dbvolume
--volumes-from 用来加载一个容器数据卷
十,查看新容器中的挂载信息:
[root@localhost docker]# docker inspect usevolume
"HostConfig": { "Binds": null,
Binds为空
"Mounts": [ { "Type": "bind", "Source": "/etc/localtime", "Destination": "/etc/localtime", "Mode": "", "RW": true, "Propagation": "rprivate" }, { "Type": "bind", "Source": "/data/nfs", "Destination": "/data/nfs", "Mode": "", "RW": true, "Propagation": "rprivate" }, { "Type": "bind", "Source": "/data/rsync", "Destination": "/data/rsync", "Mode": "", "RW": true, "Propagation": "rprivate" } ],
但Mounts下各个目录已挂载
十一,测试在dbvolume和usevolume分别写入:
1,dbvolume中
[root@dbvolume nfs]# cd /data/nfs/test [root@dbvolume test]# vi a.txt [root@dbvolume test]# more a.txt aa
2,usevolume中
[root@usevolume nfs]# cd /data/nfs/test [root@usevolume test]# vi b.txt [root@usevolume test]# more b.txt bb [root@usevolume test]# more a.txt aa
3,回到dbvolume中
[root@dbvolume test]# more b.txt bb
可见从两个容器中写入都不存在问题
十二,如果数据卷容器被停止,使用它的容器还能否正常工作?
1,停止dbvolume
[root@localhost docker]# docker stop dbvolume dbvolume [root@localhost docker]# docker ps -a | grep dbvolume 56efd12b38ab centos:latest "/bin/bash" 26 minutes ago Exited (0) 52 seconds ago dbvolume
2,到usevolume中测试读写
[root@usevolume nfs]# cd /data/nfs/test [root@usevolume test]# vi c.txt [root@usevolume test]# more c.txt cc
3,从宿主机中查看c.txt是否成功写入:
[root@localhost docker]# cd /data/nfs/test/ [root@localhost test]# more c.txt cc
4,结论:数据卷容器被停止,使用它的容器依然可以正常工作