linux怎么查看本机内存大小
283
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
案例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.2
迁移
概念:将原有的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
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~