一篇文章带你搞懂Docker存储

网友投稿 242 2022-10-22

一篇文章带你搞懂Docker存储

存储驱动

由storage driver管理的镜像层和可读写层

数据卷

概念

Data Volume本质上是Data Host文件系统中的文件或目录,能够被直接mount到容器的文件系统中。

特点

1.Data Volume是目录或文件,而非没有格式化的磁盘2.容器可以读写Volume中的数据3.volume数据可以永久保存,即使使用它的容器已经销毁

Volume容量

因为Volume是docker host文件系统的一部分,所以volume的容量取决于文件系统当前未使用的空间,目前没有办法设置

Data Volume类型

1.bind mount2.docker managed volume

Bind Mount

概念

bind mount是将host上已存在的目录或文件 mount到容器

挂载数据卷

-v:通过-v参数将host的目录挂载到容器中格式: -v :     -v ~/html:/usr/share/nginx/html 挂载源:挂载点

案例1(挂载源是目录)

#会覆盖容器原有的数据1.更换nginx容器的index.html文件[root@docker ~]# mkdir html[root@docker html]# echo "this is a web server" >index.html[root@docker ~]# docker run -d -p 80:80 --name web -v ~/html:/usr/share/nginx/html nginx[root@docker ~]# curl 127.0.0.1this is a web server2.更新宿主机文件 [root@docker html]# echo "this is a index page" >index.html [root@docker ~]# curl 127.0.0.1 this is a index page3.删除容器 [root@docker html]# docker rm -f web [root@docker ~]# ls html

案例2(挂载源是文件)

#只是修改容器中原有数据目录的某个文件[root@docker html]# docker run -d -p 80:80 --name web -v ~/html/index.html:/usr/share/nginx/html/index.html nginx

数据读写权限

1.默认是可读可写 [root@docker ~]# docker run -d -p 80:80 --name web -v ~/html:/usr/share/nginx/html nginx2.设置只读权限 [root@docker html]# docker run -d -p 80:80 --name web -v ~/html:/usr/share/nginx/html:ro  nginx

特性

1.方便数据迁移和备份2.容器移植性差

Docker managed volume

概念

docker managed volume与bind mount的最大区别是不需要指定mount源,指明mount point就可以了

挂载数据卷

格式: -v     -v /usr/share/nginx/html

案例

#启动容器[root@docker ~]# docker run -d -p 80:80 --name web -v /usr/share/nginx/html nginx[root@docker ~]# docker inspect web|grep -A 10 -i mounts       "Mounts": [           {               "Type": "volume",               "Name": "e48b3b184307306f449310b3d7604aee2b1754d43d305310a01577e38589e08f",               "Source": "/var/lib/docker/volumes/e48b3b184307306f449310b3d7604aee2b1754d43d305310a01577e38589e08f/_data",               "Destination": "/usr/share/nginx/html",               "Driver": "local",               "Mode": "",               "RW": true,               "Propagation": ""           }[root@docker _data]# ls /var/lib/docker/volumes/e48b3b184307306f449310b3d7604aee2b1754d43d305310a01577e38589e08f/_data#更新挂载源数据[root@docker _data]# echo "this is a web server">index.html

查看数据卷

#docker inspect[root@docker ~]# docker inspect web#docker volume[root@docker ~]# docker volume ls[root@docker ~]# docker volume inspect 6a80f16365009629a4e99184d377f482b23fb7420002dc536808843834ccbd35

bind mount 和 docker managed volume对比


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

(2)不同点:

不同点

bind mount

docker managed volume

volume位置

可任意指定

/var/lib/docker/volumes/

对已有挂载点的影响

隐藏并替换为volume

原有数据复制到volume

是否支持单个文件

支持

不支持,只能是目录

权限控制

可设置为只读,默认为读写权限

无控制,均为读写权限

移植性

移植性弱,与host path绑定

移植性强,无须指定host目录


容器之间共享数据

bind mount

#创建三个容器,将同一个共享目录分别挂载到容器目录里[root@docker ~]# docker run -d -p 80:80 --name web1 -v ~/html:/usr/share/nginx/html nginx[root@docker ~]# docker run -d -p 81:80 --name web2 -v ~/html:/usr/share/nginx/html nginx[root@docker ~]# docker run -d -p 82:80 --name web3 -v ~/html:/usr/share/nginx/html nginx#分别测试三个容器[root@docker ~]# curl 127.0.0.1:80this is a web server[root@docker ~]# curl 127.0.0.1:81this is a web server[root@docker ~]# curl 127.0.0.1:82this is a web server#修改volume中的数据,再次测试[root@docker html]# echo "this is a index page">index.html[root@docker html]# curl 127.0.0.1:80this is a index page[root@docker html]# curl 127.0.0.1:81this is a index page[root@docker html]# curl 127.0.0.1:82this is a index page

volume container(数据卷容器)

概念

volume container是专门为其他容器提供volume的容器,提供的卷可以使bind mount,也可以是docker managed volume。

案例

1. 使用bind mount创建一个volume container[root@docker ~]# docker create --name vc_data \> -v ~/html:/usr/share/nginx/html \> -v /root/tools:/tools \> busybox#查看容器的volume[root@docker ~]# docker inspect vc_data|grep -A 20 -i "mounts"#其他容器使用--volumes-from使用这个容器提供的volume[root@docker ~]# docker run -d -p 80:80 --name web1 --volumes-from vc_data  nginx[root@docker ~]# docker run -d -p 81:80 --name web2 --volumes-from vc_data  nginx[root@docker ~]# docker run -d -p 82:80 --name web3 --volumes-from vc_data  nginx#测试容器[root@docker ~]# curl 127.0.0.1this is a index page[root@docker ~]# curl 127.0.0.1:81this is a index page[root@docker ~]# curl 127.0.0.1:82this is a index page2. 使用docker managed volume创建一个volume container[root@docker ~]# docker create --name vc_data \> -v /usr/share/nginx/html \> -v /tools \> busybox#查看容器的volume[root@docker ~]# docker inspect vc_data|grep -A 20 -i "mounts"#其他容器使用--volumes-from使用这个容器提供的volume[root@docker ~]# docker run -d -p 80:80 --name web1 --volumes-from vc_data  nginx[root@docker ~]# docker run -d -p 81:80 --name web2 --volumes-from vc_data  nginx[root@docker ~]# docker run -d -p 82:80 --name web3 --volumes-from vc_data  nginx#添加index页面到数据卷#测试容器[root@docker ~]# curl 127.0.0.1this is a index page[root@docker ~]# curl 127.0.0.1:81this is a index page[root@docker ~]# curl 127.0.0.1:82this is a index page

特点

1.与bind mount相比,不必为每一个容器指定 host path,实现了容器与host的解耦2.使用volume container的容器,其mount point都是一致的,有利于配置的规范和标准化

Data volume 生命周期管理

备份

概念:对volume的备份实际上就是备份host文件系统中的目录和文件案例:#创建容器docker run -d --name demo -v ~/html:/usr/share/nginx/html nginx#备份host目录cp -r html html_bak

恢复

概念:数据损坏了,直接把备份的数据还原即可案例:#删除挂载源目录[root@docker /]# rm -rf html#再次访问容器找不到页面[root@k8s-master ~]# curl 172.17.0.2403 Forbidden

403 Forbidden


nginx/1.21.5

迁移

概念:将原有的volume挂载到新的容器目录案例:1.在本地进行数据迁移#启动容器docker run -d -p 80:80 --name web -v ~/html:/usr/share/nginx/html  nginx#迁移数据cp html /data/#再次启动容器docker run -d -p 80:80 --name web -v /data/html:/usr/share/nginx/html2.将数据迁移到远程宿主机#将数据目录拷贝到远程宿主机scp -r html root@192.168.12.208:/root/#启动nginx容器[root@docker ~]# docker run -d  --name web -v ~/html:/usr/share/nginx/html  nginx#测试容器[root@docker ~]# curl 172.17.0.3this is a index page

销毁

概念:我们可以删除不再需要的volume  bind mount:docker不会销毁bind mount,需要由host来进行删除  docker managed volume:#docker rm : 不会删除容器的volume#docker rm -v : 可以删除容器的volume#docker volume rm : 删除volume#docker volume rm $(docker volume ls -q): 批量删除volume

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:情感倾向分析(情感倾向分析包括哪些)
下一篇:springBoot+dubbo+zookeeper实现分布式开发应用的项目实践
相关文章

 发表评论

暂时没有评论,来抢沙发吧~