本节主要学习使用 Volume 实现容器间数据共享。
Volume
什么是Volume
Volume 翻译是容量的意思,但在计算机中我们称它为数据卷,是一个保存数据的单位。
docker 中我们使用 Volume 来进行数据共享。
为什么要进行数据共享呢?
上图中我们自定义了镜像,而在实际运行中,每个一个容器中都会有相同文件的多个副本。
在这里就会衍生出来一个问题,如果我的页面文件发生了变化,那就意味着每一个容器中对应的页面都要进行更新,如果我们只有1~2个容器还好办,如果有100个容器,那个更新操作那是很恐怖的。
为了解决这个问题就有了 Volume 这个方案。
Volume进行数据共享
通过设置-v挂载宿主机目录
格式:
docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名
示例:
#创建宿主机目录 /usr/local/projects/webapps/
#并在目录下放置一个web目录,里面包含一个index.html文件
#内容:<h1>test page</h1>
#运行命令并挂载
docker run -d -p 9901:8080 --name t1 -v /usr/local/projects/webapps:/usr/local/tomcat/webapps tomcat
docker run -d -p 9902:8080 --name t2 -v /usr/local/projects/webapps:/usr/local/tomcat/webapps tomcat
但上面这种写法会有一个问题,如果路径中有一个字母或者大小写不一样,就会挂载失败。为了解决这个问题,下面介绍第二种方法。
通过 --volumes-from 共享容器内挂载点
格式:
#首先要创建共享容器,无需运行
docker create --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名 /bin/true
#然后共享容器挂载点
docker run --volumes-from 共享容器名 --name 容器名 -d 镜像名
示例:
#创建共享容器
docker create --name webpage -v /usr/local/projects/webapps:/usr/local/tomcat/webapps tomcat /bin/true
#共享容器挂载
docker run --volumes-from webpage --name t3 -d -p 9903:8080 tomcat
docker run --volumes-from webpage --name t4 -d -p 9904:8080 tomcat
这种方式好处就是让我们在创建容器时更加简单,挂载点被统一管理。如果需要修改挂载点,只需要修改共享容器的挂载路径即可。
进入容器内部,查看 webapps 目录:
docker exec -it 5ac8c3438176 /bin/bash
cd webapps
ls
———————————————————————————————————————
web
#我们看原先的webapps默认目录不见了,已经替换为挂载点的目录。
通过修改挂载目录内容,可以实时更新容器对应的内容。
总结
本节我们学习了使用 Volume 的两种容器间数据共享方式,在实际开发中使用 -v 或者 --volumes-from,根据对应容器数据决定,推荐使用第二种方式,便于维护。
评论区