概述:
在Docker容器上可能部署多台容器,这些容器的数据文件又都是一样的,如果其中一个文件更改,如果不采用共享数据的方式,那基本每一个容器的文件都要改一次,工作量非常大,所以,实现容器间的数据共享成了必须要做的事情
![9531c1b9b9ed2a6a87ad43c52ef72043.png](https://img-blog.csdnimg.cn/img_convert/9531c1b9b9ed2a6a87ad43c52ef72043.png)
数据共享原理:
在宿主机上开辟一块空间,这个空间会被其他的容器同时进行共享,也就是在容器的内部,
我们不再持有这些数据文件,数据文件都存储在宿主机上某个硬盘,之后通过Docker环境
实现多个容器之间读取同一份文件
![cd4770fdfbdf8f4df65892bb8084df0b.png](https://img-blog.csdnimg.cn/img_convert/cd4770fdfbdf8f4df65892bb8084df0b.png)
实现数据共享方式有两种
一、通过設置-v挂载宿主机目录
格式:docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名
实例:docker run --name t1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat
步骤演示:
1、在我本地D:dockerwebappsvolume-test下面创建一个index.html
![93b1ac030c3e4f36d7cac4e8dc6216fb.png](https://img-blog.csdnimg.cn/img_convert/93b1ac030c3e4f36d7cac4e8dc6216fb.png)
2、在宿主机上的/usr/目录下创建一个webapps
![0aedfd5649303517b7938ed0f312dbee.png](https://img-blog.csdnimg.cn/img_convert/0aedfd5649303517b7938ed0f312dbee.png)
3、将第一步创建的volume-test上传到宿主机/usr/webapps目录下
![f87c290e56ec61226d9baf6b501de0ca.png](https://img-blog.csdnimg.cn/img_convert/f87c290e56ec61226d9baf6b501de0ca.png)
4、创建一个tomcat容器,并将tomcat容器内部的/usr/local/tomcat/webapps挂载点挂在了/usr/webapps上
docker run --name t1 -p 8000:8080 -d -v /usr/webapps:/usr/local/tomcat/webapps tomcat
![c3675e0a7bb56b3e751c33cf12ce46ae.png](https://img-blog.csdnimg.cn/img_convert/c3675e0a7bb56b3e751c33cf12ce46ae.png)
5、进入到tomcat容器内部查看挂载的信息,可以看到 /usr/webapps下面的volume-test已经挂载了进来
![003445d44c9bd7e4538577f6d6f72ae1.png](https://img-blog.csdnimg.cn/img_convert/003445d44c9bd7e4538577f6d6f72ae1.png)
6、访问该http://192.168.18.132:8000/volume-test/index.html
![4e63cf9937efad38449230e1b315407f.png](https://img-blog.csdnimg.cn/img_convert/4e63cf9937efad38449230e1b315407f.png)
7、直接改变宿主机 /usr/webapps/volume-test/下面的index.html
![d7a6b7b95c36e1788581827fdebd7eb9.png](https://img-blog.csdnimg.cn/img_convert/d7a6b7b95c36e1788581827fdebd7eb9.png)
8、再重新访问http://192.168.18.132:8000/volume-test/index.html
![f32fd1461110fa497f94af8db1b32651.png](https://img-blog.csdnimg.cn/img_convert/f32fd1461110fa497f94af8db1b32651.png)
可以看到容器已经是共享了宿主机的文件数据了
9、再创建一个tomcat容器t2挂载同一个目录 /usr/webapps
docker run --name t2 -p 8001:8080 -d -v /usr/webapps:/usr/local/tomcat/webapps tomcat
10、访问http://192.168.18.132:8001/volume-test/index.html
![dddce610091082aa265d77c9bb5d6dac.png](https://img-blog.csdnimg.cn/img_convert/dddce610091082aa265d77c9bb5d6dac.png)
可以看到容器间共享同一份数据(宿主机上的同一份)已经成功
二、通过--volumes-from 共享容器内挂载点
创建共享容器:docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true共享容器挂载点:docker run --volumes-from webpage --name t1 -d tomcat
步骤演示:
1、创建共享容器設置好挂载点 如下
docker create --name webpage -v /usr/webapps:/usr/local/tomcat/webapps tomcat /bin/true
![e250a6bb5858efa4fec5f4ced6cb1f50.png](https://img-blog.csdnimg.cn/img_convert/e250a6bb5858efa4fec5f4ced6cb1f50.png)
注:上面我们只是创建容器
2、创建tomcat容器t3指向共享容器,并启动容器
docker run -p 8002:8080 --volumes-from webpage --name t3 -d tomcat
![84e6270010006a734c651745eb82fa5c.png](https://img-blog.csdnimg.cn/img_convert/84e6270010006a734c651745eb82fa5c.png)
3、进入到该t3容器里面查看信息
![c845c41a4c376ca3a5b8c32543f8d2d0.png](https://img-blog.csdnimg.cn/img_convert/c845c41a4c376ca3a5b8c32543f8d2d0.png)
4、访问该容器的文件http://192.168.18.132:8002/volume-test/index.html
![444b7e26e1908cd5dbf3832e291b435c.png](https://img-blog.csdnimg.cn/img_convert/444b7e26e1908cd5dbf3832e291b435c.png)
可以看到已经成功挂载,这个时候直接改变宿主机文件,所有容器对应的文件都会改变,因为他们都是共享宿主机的同一份文件来的