Docker容器数据卷
·
🌈 个人主页: Hygge_Code
💫 个人格言: “既然选择了远方,便不顾风雨兼程”

文章目录
数据卷概念 🍂

1. 什么是数据卷?🤔
数据卷是一个或多个目录或文件,它存在于一个或多个容器中,由 Docker 挂载到容器,但不属于联合文件系统(Union File System)。
它的设计目的就是实现数据的持久化,完全独立于容器的生命周期。这意味着,即使容器被删除,挂载的数据卷也不会被删除,数据得以保留。这有点类似我们 Redis 里的 rdb 和 aof 文件,确保数据安全。
2. 数据卷能做什么?
- 数据持久化:防止容器删除导致数据丢失。
- 数据共享:在多个容器之间共享数据。
- 实时同步:宿主机和容器之间的数据修改可以实时生效。
3. 数据卷的特点
- 数据卷可在容器之间共享或重用数据。
- 卷中的更改可以直接实时生效。
- 数据卷中的更改不会包含在镜像的更新中。
- 数据卷的生命周期一直持续到没有容器使用它为止。
配置数据卷 🥝
添加数据卷的命令格式 🐦🔥
- 创建容器时,使用 -v 参数 设置数据卷
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
注意:在 CentOS7 等系统中,由于安全模块加强,目录挂载默认被视为不安全行为,需要加上
--privileged=true来扩大容器权限,否则挂载可能失败。
示例:
[root@shjava101 ~]# docker run -it --privileged=true -v /tmp/hostData:/tmp/dockerData1 ubuntu /bin/bash
这条命令将宿主机的 /tmp/hostData 目录挂载到了容器内的 /tmp/dockerData1 目录。如果宿主机上的目录不存在,Docker 会自动创建它。
注意事项:
1. 目录必须是绝对路径
2. 如果目录不存在,会自动创建
3. 可以挂载多个数据卷
配置数据卷容器 🥝

什么时候需要数据卷容器?🤔
当你需要让多个容器(比如 app1、app2、app3)共享同一批数据卷时,逐个给每个容器写 -v 挂载命令会很繁琐,这时就可以创建一个「数据卷容器」—— 它本身不跑任何业务,只负责挂载需要共享的卷,其他容器通过
--volumes-from继承它的卷配置即可
1. 创建数据卷容器 c3
docker run -it --name=c3 --privileged=true -v /volume centos:7 /bin/bash
--name=c3:给这个容器起个名字叫c3,方便后面引用。-v /volume:在容器内创建一个数据卷/volume。这个目录会被 Docker 的默认数据目录 单独管理,即使容器删除,数据也会保留。- 这个容器
c3本身就是一个“数据卷容器”,它的核心作用就是提供一个可被其他容器共享的存储目录。
2. 让其他容器(c1、c2)继承这个数据卷
容器的数据卷还可以被继承和共享,我们可以启动一个新的容器,让它继承另一个容器的数据卷配置。
继承数据卷的命令格式 🐦🔥
docker run -it --privileged=true --name=取名 --volumes-from 父容器 --name 子容器名 镜像名
例子🌰:
docker run -it --privileged=true --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --privileged=true --name=c2 --volumes-from c3 centos:7 /bin/bash
--volumes-from c3:表示新创建的容器c1和c2会继承并挂载c3中定义的所有数据卷(也就是/volume目录)。- 这样一来,
c1、c2和c3三个容器就共享了同一个/volume目录:- 在
c3的/volume里写入文件,c1和c2里也能看到; - 在
c1的/volume里修改文件,c2和c3里也会同步变化。
- 在
如果我的内容对你有帮助,请 点赞 , 评论 , 收藏 。创作不易,大家的支持就是我坚持下去的动力!
更多推荐
所有评论(0)