第3章 Docker容器的数据卷
📖3.1 数据卷概念及作用
思考几个问题:
Docker 容器删除后,在容器中产生的数据还在吗?
不在,所以容器中的数据想要持久化该怎么办?
Docker 容器和外部机器可以直接交换文件吗?
不可以,但是宿主机与容器是有联系的,我们可以通过直接访问宿主机,从而间接访问容器达到文件交换。
那容器之间想要进行数据交互怎么办?
可以通过挂载相同数据卷进行实现。
✅数据卷概念
数据卷是宿主机中的一个目录或文件 。当容器目录和数据卷目录绑定后,对方的修改会立即同步 。
- 一个数据卷可以被多个容器同时挂载
- 一个容器也可以被挂载多个数据卷
✅ 数据卷的作用
1) 容器数据持久化
2) 外部机器和容器间接通信
3) 容器之间数据交换
📖3.2 配置数据卷
创建启动容器时,使用 –v 参数 设置数据卷
[root@centos7 ~]# docker run ... –v 宿主机目录(文件):容器内目录(文件) ...
注意事项:
容器目录必须是
绝对路径如果目录不存在,会自动创建
可以挂载多个数据卷
✅演示数据卷持久化
第一步:创建容器c1并且挂载
/root/data
到/root/data_container
[root@centos7 ~]# docker run -it c1 -v /root/data:/root/data_container centos:7 /bin/bash
在/root/data_container下随便创建一个文件b.txt
第二步:关闭容器,可以看到数据卷数据文件还在
[root@centos7 ~]# docker stop c1
结果显示宿主机目录还在
第三步: 删除容器c1
[root@centos7 ~]# docker rm c1
结果显示宿主机目录还在
第四步:重新恢复c1
[root@centos7 ~]# docker run -it c1 -v ~/data:/root/data_container centos:7 /bin/bash
注意在容器中不能写~,第一个~代表root
结果恢复后发现容器中的数据还在
✅ 演示一个容器挂载多个数据卷
第一步:创建一个容器c2的centos7,同时挂载两个数据卷
docker run -it -name=c2 \
-v ~/data2:/root/data2 \
-v ~/data3:/root/data3 \
centos:7
\表示换行
1) 在容器中的data3中创建一个文件
2)在宿主机中查看是否同步
结果跟我们预想的一样,是同步显示的。
✅ 演示两个容器挂载同一个数据卷
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
在一个容器中修改文件,看到另一个容器也跟着 ,结果同上个演示。
📖3.3 配置数据卷容器
多容器进行数据交换,多个容器挂载同一个数据卷容器,完成数据交互
第一步:创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run –it --name=c3 –v /volume centos:7 /bin/bash
这里没有指定宿主机目录,默认生成一个宿主机目录
docker inspect c3 #查看c3
第二步: 创建启动 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
c1创建数据,c2同步:
使用 c3数据卷容器创建c1,c2,这时即使c3关闭不影响c3,c4交互 。
测试:关闭c3,在c2中添加文件,c1查看
数据卷小结
数据卷概念
- 宿主机的一个目录或文件
数据卷作用
容器数据持久化
客户端和容器数据交换
容器间数据交换
3.数据卷容器
创建一个容器,挂载一个目录,让其他容器继承自该容器( --volume-from )。
通过简单方式实现数据卷配置