概述:
在Docker容器上可能部署多台容器,这些容器的数据文件又都是一样的,如果其中一个文件更改,如果不采用共享数据的方式,那基本每一个容器的文件都要改一次,工作量非常大,所以,实现容器间的数据共享成了必须要做的事情
![0ca1d5aafaf80262ca8de65923837b65.png](https://i-blog.csdnimg.cn/blog_migrate/fb9a6b99add06fb5ede9ec20339efed9.jpeg)
数据共享原理:
在宿主机上开辟一块空间,这个空间会被其他的容器同时进行共享,也就是在容器的内部,
我们不再持有这些数据文件,数据文件都存储在宿主机上某个硬盘,之后通过Docker环境
实现多个容器之间读取同一份文件
![3c472653c13d50b5330584934261a10b.png](https://i-blog.csdnimg.cn/blog_migrate/73f0d19cc01909cf17b9b4b0684e8de7.jpeg)
实现数据共享方式有两种
一、通过設置-v挂载宿主机目录
格式:docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名
实例:docker run --name t1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat
步骤演示:
1、在我本地D:dockerwebappsvolume-test下面创建一个index.html
![5226440082eeb2ce775b8606cdd1aab8.png](https://i-blog.csdnimg.cn/blog_migrate/e43ece656ce2ed416f77862253cb11c1.jpeg)
2、在宿主机上的/usr/目录下创建一个webapps
![4da75c45b90779b9f48ce868e6c5d873.png](https://i-blog.csdnimg.cn/blog_migrate/8335ffcead8204933ecfba819677559b.jpeg)
3、将第一步创建的volume-test上传到宿主机/usr/webapps目录下
![90c35bfbe8644eb9ebea85819e3aa927.png](https://i-blog.csdnimg.cn/blog_migrate/d32f3d1fd9df7e5d2a21f96ef0d001f4.jpeg)
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
![418a5d7f7328f71b3ad8bac110924e3a.png](https://i-blog.csdnimg.cn/blog_migrate/89b220022072b4e2bfbd1cc89f65a97c.jpeg)
5、进入到tomcat容器内部查看挂载的信息,可以看到 /usr/webapps下面的volume-test已经挂载了进来
![2645a1b2583e3271e51b65977561dde2.png](https://i-blog.csdnimg.cn/blog_migrate/9d193b82a46009aee1369cf9f7033da4.jpeg)
6、访问该http://192.168.18.132:8000/volume-test/index.html
![cfff22d324d6ea41607074e60736cb44.png](https://i-blog.csdnimg.cn/blog_migrate/672d3ab1a7bff0fffdf0bce26d428d91.jpeg)
7、直接改变宿主机 /usr/webapps/volume-test/下面的index.html
![c2c2b7293380a3ad459f2bce8e063029.png](https://i-blog.csdnimg.cn/blog_migrate/ee507b9ca21d6bda8b6434af24f8e188.jpeg)
8、再重新访问http://192.168.18.132:8000/volume-test/index.html
![83526d49dd68dae05ab6b3e27743b94e.png](https://i-blog.csdnimg.cn/blog_migrate/80b40a396d83277911ec6badbb9172fb.jpeg)
可以看到容器已经是共享了宿主机的文件数据了
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
![a50ce642dd3f5c97ea63a642f2785c3c.png](https://i-blog.csdnimg.cn/blog_migrate/77467168ab68a769d395904b7c87807d.jpeg)
可以看到容器间共享同一份数据(宿主机上的同一份)已经成功
二、通过--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
![1ce07bc536b71eaf5571b3220b0d6c21.png](https://i-blog.csdnimg.cn/blog_migrate/c983f55ea84859953d0d7ab3c3595cc1.jpeg)
注:上面我们只是创建容器
2、创建tomcat容器t3指向共享容器,并启动容器
docker run -p 8002:8080 --volumes-from webpage --name t3 -d tomcat
![4275efb03a87eb6e68679e7fc545a326.png](https://i-blog.csdnimg.cn/blog_migrate/fecef8473e4ffb434b0737b48a9bfc43.jpeg)
3、进入到该t3容器里面查看信息
![ffa33a96ff7e223b50664ab46200fa3c.png](https://i-blog.csdnimg.cn/blog_migrate/10809fa0773bc4057a462e8f72d714ee.jpeg)
4、访问该容器的文件http://192.168.18.132:8002/volume-test/index.html
![a9395b0df2aa437258a3b250adc1af71.png](https://i-blog.csdnimg.cn/blog_migrate/cb7d622cacc219975b187f0cced90f1d.jpeg)
可以看到已经成功挂载,这个时候直接改变宿主机文件,所有容器对应的文件都会改变,因为他们都是共享宿主机的同一份文件来的