一、数据卷概念及作用
数据卷概念
数据卷作用
二、配置数据卷
- 创建启动容器时,使用
-v
参数设置数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件) ...
- 注意事项:
- 目录必须是绝对路径。
- 如果目录不存在,则会自动创建。
- 可以挂载多个数据卷(一个
-v
挂载一个)。
2.1 演示容器数据持久化
演示:
查看宿主机,有个空的 data 文件夹:
查看容器
演示:宿主机中的数据卷的改动 --> 容器中数据卷的改动
宿主机:创建了一个 Test.txt 文件
容器:相应的也出现了这个文件
演示:容器中数据卷的改动 --> 宿主机中的数据卷的改动
容器:写入了 HelloWorld:
宿主机:相应的文件也写入了 HelloWorld:
演示:删除容器后 --> 宿主机中的挂载数据卷还存在
删除容器:
查看宿主机数据卷:数据卷依然存在
演示:宿主机数据卷挂载到新容器后,容器中的数据卷是否存在
创建启动容器,挂载数据卷:
查看容器中数据卷:文件依然存在
2.2 演示一个容器挂载多个数据卷
创建容器 c3 挂载多个数据卷data2和data3:
在容器中查看:
2.3 演示容器之间的数据交换
多个容器挂载同一个数据卷即可实现容器之间的数据交换:
下面为演示:
创建容器c4,挂载宿主机的data目录:
创建容器c5,同样挂载宿主机的data目录:
现在在容器c5里,往 Test.txt 文件中追加 HelloJava!!:
查看容器c4,其 Test.txt 中也被追加了文本:
此刻,实现了不同容器之间的数据交换。
三、配置数据卷容器
3.1 数据卷容器
多容器进行数据交换有两种方式:
- 多个容器挂载同一个数据卷(已讲过)
- 数据卷容器(接下来要讲)
数据卷容器c3挂载数据卷,然后容器c1、c2分别再挂载到数据卷容器c3上:
此效果跟容器c1、c2 分别挂载到数据卷是一样的:
因为容器c1、c2、c3 都挂载到了同一个数据卷,因此这些容器是可以相互通信的。
3.2 配置数据卷容器
- 创建启动c3数据卷容器,使用
-v
参数设置数据卷
docker run -it --name=c3 -v /volume ubuntu /bin/bash
此处只设置了容器中数据卷存放的位置,未写宿主机目录,系统会使用默认的目录。
- 创建启动 c1、c2 容器,使用
--volumes-from
(让其他容器继承该容器)参数设置数据卷
docker run -it --name=c1 --volumes-from c3 ubuntu /bin/bash
docker run -it --name=c2 --volumes-from c3 ubuntu /bin/bash
上面命令的效果如图:
演示:
创建启动c3数据卷容器:
该容器中存在目录 volume:
创建启动 c1、c2 容器
容器中存在目录 volume:
此刻,容器c1、c2、c3 之间就通了。
通过 inspect
命令查看容器信息:
以下分别为 c1、c2、c3 容器信息:
可以看到他们挂载的都是同一个数据卷。