数据卷概念
- 数据卷是宿主机中的一个目录或文件
- 当容器目录和数据卷目录绑定后,对方的修改会立刻同步
- 一个数据卷可以被多个容器同时挂载
- 一个容器也可以被挂载多个数据卷
数据卷作用
- 容器数据持久化(mysql等)
- 外部机器和容器间接通信
- 容器之间数据交换
图左:容器与宿主机上的某一目录或文件进行挂载 -v 于是容器中和宿主机之间通过挂载的数据卷进行通信,实现了容器数据的持久化和外部机器和容器之间的通信。
图右:我们也可以使用多个容器,与宿主机的同一个数据卷(文件或目录)进行挂载。这样我们就间接实现了容器之间的数据交换和通信了
启动容器时,使用 -v 参数设置数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件) ...
注意事项:
- 目录必须是绝对路径
- 如果目录不存在,会自动创建
- 可以挂载多个数据卷
数据卷容器概念
有了上面数据卷的概念,我们再设想一下若数据卷数量过多的情况下,我们如何进行管理?总不能每一个都连接在宿主机上配置一个数据卷。数量一旦上去,这样操作起来很麻烦。所以有了管理数据卷的数据卷容器概念
数据卷容器操作
我们现创建c3容器为数据卷,将c1 c2 容器挂载到c3上
步骤为:
创建一个容器,挂载到宿主机上(-v /volume,左边没有宿主机的路径,会自动分配)
并让其他容器继承自该容器( --volumes-from 数据卷容器)
创建启动c3数据卷容器,使用-v 参数设置数据卷
docker run -it --name=c3 -v /volume
创建启动c1c2容器,使用--volumes-from参数 设置数据卷
docker run -it --name=c1 --volumes-from c3
docker run -it --name=c2 --volumes-from c3
数据卷容器像一个集线器,将所有需要连接的容器通过他连接到宿主机的数据卷上,虽然什么也没做,但使得整体结构更加清晰。注意的是:即使c3挂掉了,c1 c2也可以正常进行通信,因为已经和宿主机数据卷连接了