1.1什么是数据卷
1.1.1需要解决的问题
出于效率等一系列原因,
docker
容器的文件系统在宿主机上存在的方式很复杂,
这会带来下面几个问题:
1⃣️当容器删除时,容器中产生的数据将丢失
:
例如,
MySQL
容器损坏无法启动,需要删除容器重新创建,那么数据库数据将会丢失
![](https://img-blog.csdnimg.cn/c3841c02817748259a3bd228a21b08e2.png)
2⃣️无法在多个容器之间共享数据
例如,
Tomcat
集群部署成功后,无法共享程序文件
![](https://img-blog.csdnimg.cn/98dc6a74f0464f2185fd78d4b2fe765f.png)
2.1数据卷的概念
为了解决以上的问题,
docker
引入了数据卷
(
volume
)
机制
。数据卷是存在于一
个或多个容器中的特定文件或文件夹,这个文件或文件夹以独立于
docker
文件
系统的形式存在于宿主机中
。
当容器删除时,容器中的数据可以被持久化
:
![](https://img-blog.csdnimg.cn/b6e1a446365c4a05a2ea784480f38694.png)
数据卷的最大特点是:其生存周期独立于容器的生存周期。
使用数据卷可以在多
个容器之间共享数据
。
3.1配置数据卷目录
3.1.1挂载数据卷
将宿主机根目录中的
dataVolumeHost
挂载到容器根目录中的
dataVolumeContainer
docker run
-it -v
/dataVolumeHost:/dataVolumeContainer
--name
centos2 centos:7
-v:挂载数据卷
格式:/宿主机目录(文件):/容器内目录(文件)
目录必须是绝对路径
如果目录不存在,则自动创建
可以挂载多个数据卷
![](https://img-blog.csdnimg.cn/2cda29a8aa1245a49ae65d3cfddf2de9.png)
挂载的数据卷已经存在了,然后往里面存一个文件
显示是有的ab.txt文件的
然后启动centos2,并且进入终端,找到挂载的文件,我们可以发现ab.txt已经存在了
3.1.2一个容器挂载多个数据卷
docker run
-it
\
-v
/dataVolumeHost31:/dataVolumeContainer31 \
-v
/dataVolumeHost32:/dataVolumeContainer32 \
--name
centos3 centos:7
![](https://img-blog.csdnimg.cn/c418fa44c6d346d695f24fd386def270.png)
3.1.3两个容器挂载同一个数据卷
docker run
-it -v
/dataVolumeHost:/dataVolumeContainer4
--name
centos4 centos:7
docker run
-it -v
/dataVolumeHost:/dataVolumeContainer5
--name
centos5 centos:7
![](https://img-blog.csdnimg.cn/cbd8cb86fd9e4ad8b2317616d878668f.png)
也是同步的数据
4.1数据卷容器
4.1.1什么是数据卷容器
多容器数据交换的方式
多个容器挂载宿主机上的同一个数据卷
目录
多个容器挂载宿主机上的同一个数据卷
容器
首先将宿主机上的数据卷目录挂载到容器1上
然后将容器1挂载到容器2和容器3上
此时宿主机上的数据卷目录就会自动挂载到容器2和容3上,
即使容器3宕机,也不会影响其
他两个容器的运行
![](https://img-blog.csdnimg.cn/3a9f25216aa34311830cd14ccdb3c8ff.png)
当
-v
参数后面只有一个目录的时候
,表示
只设置容器中的数据卷目录
,而宿主
机中的数据卷目录会被自动分配
docker run
-it -v
/volume
--name
c1 centos:7
挂载数据卷容器
docker run -it --volumes-from c1 --name c2 centos:7
docker run
-it --volumes-from
c1
--name
c3 centos:7
--volumes-from
:将当前容器挂载到指定的数据卷容器上
容器创建成功后,可以查看
c1
和
c2
的数据卷目录的分配情况,发现和
c1
使用的是同一个
宿主机的文件目录