一、什么是数据卷
数据卷是宿主机中的一个目录或文件,当容器目录或者文件和数据卷目录或者文件绑定后,对方的修改会立即同步,一个数据卷可以被多个容器同时挂载,一个容器也可以被挂载多个数据卷,数据卷的作用:容器数据持久化,外部机器和容器间接通信,容器之间数据交换
思考:
Docker 容器删除后,在容器中产生的数据还在吗?
Docker 容器和外部机器可以直接交换文件吗?
容器之间想要进行数据交互?
二、如何使用数据卷
2.1、配置数据卷
语法:docker run … –v 宿主机目录(文件):容器内目录(文件) …
2.1.1、案例一
[root@localhost ~]docker run -it --name=c3 -v /root/data:/root/data_container centos:7 /bin/bash
[root@localhost ~]docker run -it --name=c4 -v /root/data:/root/contai1 -v /root/data1:/root/contai2 centos:7
提示:centos:7为docker中下载的镜像名称
Ps:注意事项:
1、目录必须是绝对路径 (宿主机和容器目录都是绝对路径)
2、如果目录不存在,会自动创建
3、可以挂载多个数据卷
配置数据卷后,在/root/data下创建文件,发现会同步到c3容器的data_container目录中,同理反过来也一样,当删除容器后,此时并不影响宿主机/root/data里的内容
2.1.2、案例二:多容器进行数据交换
第1步、创建启动c3数据卷容器,使用 –v 参数 设置数据卷
[root@localhost ~]#docker run –it --name=c3 –v /volume centos:7 /bin/bash
[root@localhost ~]#docker inspect c3 #查看c3容器
-v 后面的/volume是容器的目录,那么这个宿主机的目录为什么不见了呢?其实这个时候linux会自动创建一个目录(目录名很长)作为源目录和/volume容器目录相对应。可以通过 docker inspect c3 查看c3容器
第2步:创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷
[root@localhost ~]#docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bash
[root@localhost ~]#docker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash
此时c1和c2 挂载到和c3相同的宿主机的目录,在c3容器创建内容,c1和c2都会自动同步 (也就是说在c1和c2的根目录下也有 volume文件夹)
[root@localhost ~]#docker inspect c1
[root@localhost ~]#docker inspect c2
发现c1 c2的宿主机目录和c3相同
2.2、数据卷总结
- 数据卷概念:宿主机的一个目录或文件
- 数据卷作用:容器数据持久化、客户端和容器数据交换、容器间数据交换
- 数据卷容器:创建一个容器,挂载一个目录,让其他容器继承自该容器( --volume-from )。通过简单方式实现数据卷配置