侧边栏壁纸
博主头像
码森林博主等级

一起走进码森林,享受编程的乐趣,发现科技的魅力,创造智能的未来!

  • 累计撰写 146 篇文章
  • 累计创建 74 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Docker(9):Volume 容器间数据共享

码森林
2022-02-24 / 0 评论 / 0 点赞 / 672 阅读 / 1,362 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-02-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

本节主要学习使用 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,根据对应容器数据决定,推荐使用第二种方式,便于维护。

0

评论区