🌈 个人主页: Hygge_Code
💫 个人格言: “既然选择了远方,便不顾风雨兼程”

在这里插入图片描述

数据卷概念 🍂

在这里插入图片描述

1. 什么是数据卷?🤔

数据卷是一个或多个目录或文件,它存在于一个或多个容器中,由 Docker 挂载到容器,但不属于联合文件系统(Union File System)。

它的设计目的就是实现数据的持久化,完全独立于容器的生命周期。这意味着,即使容器被删除,挂载的数据卷也不会被删除,数据得以保留。这有点类似我们 Redis 里的 rdb 和 aof 文件,确保数据安全。

2. 数据卷能做什么?

  • 数据持久化:防止容器删除导致数据丢失。
  • 数据共享:在多个容器之间共享数据。
  • 实时同步:宿主机和容器之间的数据修改可以实时生效。

3. 数据卷的特点

  1. 数据卷可在容器之间共享或重用数据。
  2. 卷中的更改可以直接实时生效。
  3. 数据卷中的更改不会包含在镜像的更新中。
  4. 数据卷的生命周期一直持续到没有容器使用它为止。

配置数据卷 🥝

添加数据卷的命令格式 🐦‍🔥

  • 创建容器时,使用 -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:表示新创建的容器 c1c2 会继承并挂载 c3 中定义的所有数据卷(也就是 /volume 目录)。
  • 这样一来,c1c2c3 三个容器就共享了同一个 /volume 目录:
    • c3/volume 里写入文件,c1c2 里也能看到;
    • c1/volume 里修改文件,c2c3 里也会同步变化。

如果我的内容对你有帮助,请 点赞 评论 收藏 。创作不易,大家的支持就是我坚持下去的动力!
在这里插入图片描述

更多推荐