Docker | 容器数据卷详解
什么是容器数据卷
从 docker 的理念说起,docker 将应用和环境打包成一个镜像,运行镜像(生成容器)就可以访问服务了。
如果数据都存在容器中,那么删除容器,数据就会丢失!需求:数据可以持久化
MySQL 容器删了,就相当于删库了。需求:MySQL 数据可以本地存储
容器之间可以有一个数据共享的技术,docker 容器产生的数据同步到本地或者别的地方。
这就是数据卷技术,就是目录挂载,将容器内的目录,挂载到虚拟机上或者 Linux 上

目的:实现容器数据的持久化和同步操作。容器间也可以数据共享
数据的覆盖问题
如果挂载一个
空的数据卷
到容器中的一个非空目录
中,那么这个目录下的文件会被复制到数据卷中。如果挂载一个
非空的数据卷
到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷
中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。
使用数据卷
方式一:直接使用命令挂载 -v
docker run -it -v 主机目录:容器内目录
docker inspect
命令查看容器信息

测试挂载卷
1、在容器内部修改文件同步到 Linux 主机上
进入容器,在/home
目录下创建123.sh
文件

主机内可以查看在容器内部创建的文件

2、同样地,在 Linux 上修改挂在卷文件可以同步到容器内部

3、停止容器,修改 Linux 主机上的文件,同步到容器内

方式二:Dockerfile 文件
请查看下一章节
数据卷命令
docker volume
查看帮助

具名挂载/匿名挂载
匿名挂载
-v
容器内路径-P
自动分配端口号
docker run -d -P --name nginx02 -v /etc/nginx nginx
具名挂载
-v
卷名:容器内路径
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx

查看数据卷
方式一:docker inspect 容器 ID

方式二:docker volume inspect juming-nginx

查看 Linux 主机 docker 工作目录
/var/lib/docker
所有 docker 容器内的卷,没有指定目录的情况下都是存放在
/var/lib/docker/volumes/xxx/_data
目录下

挂载三种方式
-v
容器内路径 # 匿名挂载-v
卷名:容器内路径 # 具名挂载-v
宿主机路径:容器内路径 # 指定路径挂载
扩展
给挂载的数据卷增加读写权限控制
通过 -v
容器内路径, ro
rw
改变读写权限
ro readonly 只读
rw readwrite 可读写
一旦设置了容器权限,容器对我们挂载出来的内容就有限定了
ro
: 说明这个路径只能通过宿主机来操作,容器内无法操作
我是 甜点cc
热爱前端,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚,等待着一个创业机会。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。
希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。
版权声明: 本文为 InfoQ 作者【甜点cc】的原创文章。
原文链接:【http://xie.infoq.cn/article/abc1fdab0a9bc23c95fb3fa3f】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论