思考几个问题:
不在,所以容器中的数据想要持久化该怎么办?
不可以,但是宿主机与容器是有联系的,我们可以通过直接访问宿主机,从而间接访问容器达到文件交换。
可以通过挂载相同数据卷进行实现。
1)数据卷是宿主机中的一个目录或文件
2)当容器目录和数据卷目录绑定后,对方的修改会立即同步
3)一个数据卷可以被多个容器同时挂载
4)一个容器也可以被挂载多个数据卷
1) 容器数据持久化
2) 外部机器和容器间接通信
3) 容器之间数据交换
创建启动容器时,使用 –v 参数 设置数据卷
[root@centos7 ~]# docker run ... –v 宿主机目录(文件):容器内目录(文件) ...
注意事项:
容器目录必须是
绝对路径
如果目录不存在,会自动创建
可以挂载多个数据卷
创建容器c1并且挂载
/root/data
到/root/data_container
[root@centos7 ~]# docker run -it --name=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 --name=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
在一个容器中修改文件,看到另一个容器也跟着 ,结果同上个演示。
多容器进行数据交换,多个容器挂载同一个数据卷容器,完成数据交互
docker run –it --name=c3 –v /volume centos:7 /bin/bash
这里没有指定宿主机目录,默认生成一个宿主机目录
docker inspect c3 #查看c3
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 )。
通过简单方式实现数据卷配置