Docker容器间数据共享
Docker容器间为什么要进行数据共享?
在集群环境下,每次服务发布时,都需要更新所有容器中的项目文件,在大规模的集群下这个工作量会被无限放大。
所以,这个时候就需要用到数据共享来解决这个问题。即多个容器共享同一个数据副本。
数据共享原理:
在宿主机的硬盘上开辟一个空间, 用来存放共享的数据,多个容器共享这个目录。
同Linux或Windows挂载共享目录类似。
数据共享的方案
(1)通过设置-v挂载宿主机目录
格式:
docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名
docker run --name t1 -d -p 8000:8080 -v /usr/webapps:/usr/local/tomcat/webapps tomcat
docker run --name t2 -d -p 8001:8080 -v /usr/webapps:/usr/local/tomcat/webapps tomcat
启动容器后,修改宿主机/usr/webapps目录内容,测试通过8000/8001端口访问是否同步更新。如果同步更新了,则说明挂载OK!
这样的话,每个容器都挂载了同一个宿主机目录,启动的时候都需要指定挂载目录;那挂载目录能不能由统一的一个容器来完成,其他容器只需要通过这个容器来获取数据,这样就有了Volume container(数据卷容器)。
Volume container(数据卷容器)只需要创建即可,不需要实际运行,只需要提供数据卷的功能即可。
(2)创建数据卷共享容器
数据卷共享容器最好以vc_开头命令,以便和其他容器区分。
创建共享容器
docker create --name vc_webpage -v /usr/webapps://usr/local/tomcat/webapps tomcat /bin/true
共享容器挂载点
docker run --volumes-from vc_webpage --name t1 -d -p 8000:8080 tomcat
docker run --volumes-from vc_webpage --name t2 -d -p 8001:8080 tomcat
查看所有容器
docker ps -a
查看容器元数据信息
docker inspect vc_webpage
同样,启动容器后,修改宿主机/usr/webapps目录内容,测试通过8000/8001端口访问是否同步更新。
说明:
本文所说的容器间数据共享指的是同一台宿主机上,多个容器之间的数据共享;如果是跨服务器容器间数据共享,则涉及到服务器与服务器之间的数据同步问题,不属于Docker的技术范畴。
(完)