Docker容器的数据卷概念
数据卷概念及作用
思考:
-
Docker 容器删除后,在容器中产生的数据还在吗?
-
Docker 容器和外部机器可以直接交换文件吗?
-
容器之间想要进行数据交互?
数据卷概念
- 数据卷是宿主机中的一个目录或文件
- 当容器目录和数据卷目录绑定后,对方的修改会立即同步
- 一个数据卷可以被多个容器同时挂载
- 一个容器也可以被挂载多个数据卷
数据卷的作用
- 容器数据持久化
- 外部机器和容器间接通信
- 容器之间数据交换
配置数据卷
创建启动容器时,使用-v 参数 设置数据卷
docker run ... –v 宿主机目录(文件):容器内目录(文件) ...
注意事项:
- 容器目录必须是绝对路径
- 如果目录不存在,会自动创建
- 可以挂载多个数据卷
演示数据卷持久化
创建c1挂载/root/data到/root/data_container
docker run -it --name=c1 v /root/data:/root/data_container centos:7 /bin/bash
关闭容器,可以看到数据卷数据文件还在
docker stop c1
宿主机目录还在
删除容器c1
docker rm c1
宿主机目录还在
重新恢复c1
docker run -it --name=c1 -v ~/data:/root/data_container centos:7 /bin/bash
注意在容器中不能写~
- 演示一个容器挂载多个数据卷
docker run -it --name=c2 \
-v ~/data2:/root/data2 \
-v ~/data3:/root/data3 \
centos:7
- 两个容器挂载同一个数据卷
docker run -it --name=c3 -v /root/data:/root/data_container centos:7 /bin/bash
docker run -it --name=c4 -v /root/data:/root/data_container centos:7 /bin/bash
在一个容器中修改文件,看到另一个容器也跟着
配置数据卷容器
多个容器进行数据交换,多个容器挂载同一个数据卷容器,完成数据交互
1.创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
这里有指定宿主机目录,默认会生成一个宿主局目录
docker inspect c3 #查看c3
2.创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
使用 c3数据卷容器创建c1,c2,这时即使c3关闭不影响c3,c4交互
数据卷小结
- 数据卷概念
- 宿主机的一个目录或文件
- 数据卷作用
- 容器数据持久化
- 客户端和容器数据交换
- 容器间数据交换
- 数据卷容器
- 创建一个容器,挂载一个目录,让其他容器继承来自该容器(–volume-from)。
- 通过简单方式实现数据卷配置