Docker学习(九)Volumn容器间共享数据


volume是什么

volume在英文中是容量的意思, 在docker中是数据卷的意思,是用来保存数据的容器

为什么要进行数据共享

在集群中有多台tomcat,对于集群中的tomcat部署的代码是同一份代码的副本,如果页面文件发生变化,意味着每个容器中的页面文件都要进行更新,在大规模的集群中这样的工作量会被无限放大,这时候就需要用到数据共享解决此问题,所谓数据共享指的是多个容器共享一个数据副本,在docker环境中我们该如何实现?

数据共享原理

在宿主机的硬盘上开辟一个空间,用来存放共享的数据,多个容器共享这个目录

实现数据共享的解决方案

说到数据共享我们其实很容易想到linux中的mount命令,通过挂载一共享目录来

  • [x] 使用参数 -v 宿主机目录:/容器内容目录 将共享的文件放在宿主机的某个文件中,然后多个容器之前共享这一个目录,实现数据共享,这需要在启动时

  • [x] 使用参数 -v 宿主机目录:/容器内容目录共享容器挂载宿主机共享目录,然后通过挂载共享容器实现数据共享

容器直接挂载共享目录

资源列表

准备2个tomcat容器:

tomcat8000 tomcat8001

详细步骤

  1. 创建共享数据

    创建共享目录:mkdir -p /usr/local/docker/volumn/pages/

    在共享目录中增加共享文件: index.html,内容如下

    我是一个volumn 共享目录 albk!
  2. 创建tomcat8000tomcat8001

    docker run -d --name tomcat8000 -p 8000:8080 -v /usr/local/docker/volumn:/usr/local/tomcat/webapps tomcat

    docker run -d --name tomcat8001 -p 8001:8080 -v /usr/local/docker/volumn:/usr/local/tomcat/webapps tomcat

启动容器时将宿主机的/usr/local/docker/volumn目录,挂载到tomcat容器的/usr/local/tomcat/webapps 这个目录,这样就可以实现数据共享

  1. 验证容器是否正常启动

    docke ps

docker exec -it a05a987b6da0 /bin/bash

查看一下webapps目录下,是否挂载成功

  1. 浏览器访问

    http://宿主机ip:8000/pages/index.html

    http://宿主机ip:8001/pages/index.html

  1. 修改共享文件

    echo "我是一个volumn 共享目录 albk! 被修改了" > index.html
  2. 浏览器再次验证

可以看到我们修改的内容,已经实时生效了,不需要重新部署tomcat容器,但是这样实现每次容器启动的时候,参数会很长,很容易出错,在集群较小的时候可以这样,但是规模大的时候,这也是不少的工作量,下面我们看一下另一种方法

共享容器挂载

  • 创建一个共享容器 webpages,通过上述的方法,使用-v 挂载共享目录

    docker create --name webpages -v /usr/local/docker/volumn/pages:/usr/local/tomcat/webapp tomcat /bin/true

  • 挂载共享容器

    docker run --name tomcat8000 -d -p 8000:8080 --volumes-from webpages tomcat

    docker run --name tomcat8001 -d -p 8001:8080 --volumes-from webpages tomcat

    验证过程和上面的一样,容器webpages实际作用就是定义了一个挂载点,修改内容的时候,只需要修改共享容器的共享目录即可

总结

如果容器少的话用-v 如果容器多的话, 可以使用-volumes-from 本质与-v是一样的,具体使用哪个根据实际情况而定

写在最后

相关文章会首发公众号,可以关注公号albk,关注后可以获取大量学习视频

期望热爱技术的你一起来交流,获取最新资料和学习资源,可以关注公众号albk, 个人博客 !

Docker学习(九)Volumn容器间共享数据的更多相关文章

  1. Qt学习:线程间共享数据(使用信号槽传递数据,必须提前使用qRegisterMetaType来注册参数的类型)

    Qt线程间共享数据主要有两种方式: 使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的: 使用singal/slot机制,把数据 ...

  2. 详解 Qt 线程间共享数据(用信号槽方式)

    使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的. Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容.Qt线程间共享 ...

  3. 进程间共享数据Manager

    一.前言 进程间的通信Queue()和Pipe(),可以实现进程间的数据传递.但是要使python进程间共享数据,我们就要使用multiprocessing.Manager. Manager()返回的 ...

  4. Disruptor 线程间共享数据无需竞争

    队列的作用是缓冲 缓冲到 队列的空间里.. 线程间共享数据无需竞争 原文 地址  作者  Trisha   译者:李同杰 LMAX Disruptor 是一个开源的并发框架,并获得2011 Duke’ ...

  5. 详解 Qt 线程间共享数据(使用signal/slot传递数据,线程间传递信号会立刻返回,但也可通过connect改变)

    使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的. Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容.Qt线程间共享 ...

  6. laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法

    laravel框架中视图间共享数据有两种,一种是用视图门面share()方法实现,另一种是用视图门面composer() 方法实现,那么,两种方法的实现究竟是怎样的呢?让我们来看一看接下来的文章内容. ...

  7. python 进程间共享数据 (二)

    Python中进程间共享数据,除了基本的queue,pipe和value+array外,还提供了更高层次的封装.使用multiprocessing.Manager可以简单地使用这些高级接口. Mana ...

  8. python 进程间共享数据 (一)

    def worker(num, mystr, arr): num.value *= 2 mystr.value = "ok" for i in range(len(arr)): a ...

  9. contentprovider提供程序间共享数据的统一接口

    contentprovider提供程序间共享数据的统一接口

随机推荐

  1. 【js】vue 2.5.1 源码学习 (七) 初始化之 initState 响应式系统基本思路

    大体思路(六) 本节内容: 一.生命周期的钩子函数的实现 ==> callHook(vm , 'beforeCreate') beforeCreate 实例创建之后 事件数据还未创建 二.初始化 ...

  2. js基础——基本包装类型

    1.基本包装类型String   var bz = new String("Li.Linda"); //引用类型(object)         bz.name= bz.subst ...

  3. H3C DHCP服务器可选配置

  4. (摘录)ISO C++ Lambda表达式

    ISO C++ 11 标准的一大亮点是引入Lambda表达式.基本语法如下: [捕获列表](形参列表) mutable ->返回值类型 复合语句 其中除了"[]"(其中捕获列 ...

  5. C# 强转空会不会出现异常

    有小伙伴问我强转 null 会不会出现异常,我告诉他,如果是引用类型那么不会,如果是值类型,那么会出现空异常 如果是引用类型,只要是空类型,是支持随意转换,如下面代码,这是可以运行 class Pro ...

  6. HDU6333 莫队+组合数学

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6333 题意: T次询问,每次询问n个苹果中最多拿m个苹果的方法数 题解: 因为T为1e5,所以直接做时间 ...

  7. 使用Squid做代理服务器,Squid单网卡透明代理配置详解(转)

    使用Squid做代理服务器 说到代理服务器,我们最先想到的可能是一些专门的代理服务器网站,某些情况下,通过它们能加快访问互联网的速度.其实,在需要访问外部的局域网中,我们自己就能设置代理,把访问次数较 ...

  8. 数据多js平均时间取固定条数展示,echarts数据多处理数据

    js代码: function getfailurerate(start,end,ip) { $.ajax( { url : "report/getvirtual.action", ...

  9. 洛谷P-4782 2-sat+Tarjan

    https://www.luogu.org/problemnew/solution/P4782 这里的大佬已经说的够好了 #include<iostream> #include<cs ...

  10. $NOIp$普及组做题记录

    \([NOIp2014]\) 螺旋矩阵 \(Sol\) 直接模拟,一次走一整行或者一整列.复杂度\(O(n)\). \(Code\) #include<bits/stdc++.h> #de ...