Docker Volumn容器间共享数据的实现

volume是什么

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

为什么要进行数据共享

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

数据共享原理

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

实现数据共享的解决方案

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

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

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

容器直接挂载共享目录

资源列表

准备2个tomcat容器:
tomcat8000 tomcat8001

详细步骤

创建共享数据

创建共享目录:mkdir -p /usr/local/docker/volumn/pages/
在共享目录中增加共享文件: index.html,内容如下

我是一个volumn 共享目录 albk!

创建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 这个目录,这样就可以实现数据共享

验证容器是否正常启动

docke ps 

docker exec -it a05a987b6da0 /bin/bash
查看一下webapps目录下,是否挂载成功

浏览器访问
http://宿主机ip:8000/pages/index.html
http://宿主机ip:8001/pages/index.html

修改共享文件

echo "我是一个volumn 共享目录 albk! 被修改了" > index.html

浏览器再次验证

可以看到我们修改的内容,已经实时生效了,不需要重新部署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是一样的,具体使用哪个根据实际情况而定

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Docker的持久化存储和数据共享

    有些容器会自动产生一些数据,为了不让数据随着container的消失而消失,保证数据的安全性.例如:数据库容器,数据表的表会产生一些数据,如果我把container给删除,数据就丢失.为了保证数据不丢失,这就有了Volume的存在. Data Volume 结构图 Docker持久化数据的方案 基于本地文件系统的Volume.可以再执行Docker create或Docker run时,通过-v参数将主机的目录作为容器的数据卷.这部分功能便是基本的本地文件系统的volume管理. 基于plugi

  • 详解Docker挂载本地目录及实现文件共享的方法

    docker挂载本地目录的方法总结: Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定. 譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定: # docker run -it -v /test:/soft centos /bin/bash 这样在容器启动后,容器内会自动创建/soft的目录.通过这种方式,我们可以明确一点,即-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录. 貌似简单,其

  • Docker Volumn容器间共享数据的实现

    volume是什么 volume在英文中是容量的意思, 在docker中是数据卷的意思,是用来保存数据的容器 为什么要进行数据共享 在集群中有多台tomcat,对于集群中的tomcat部署的代码是同一份代码的副本,如果页面文件发生变化,意味着每个容器中的页面文件都要进行更新,在大规模的集群中这样的工作量会被无限放大,这时候就需要用到数据共享解决此问题,所谓数据共享指的是多个容器共享一个数据副本,在docker环境中我们该如何实现? 数据共享原理 在宿主机的硬盘上开辟一个空间,用来存放共享的数据,

  • AngularJS实现controller控制器间共享数据的方法示例

    本文实例讲述了AngularJS实现controller控制器间共享数据的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html ng-app="myapp"> <head> <title>www.jb51.net 控制器间共享数据</title> <link rel="stylesheet" href="http://netdna.bootstrapcdn.co

  • Python multiprocessing.Manager介绍和实例(进程间共享数据)

    Python中进程间共享数据,处理基本的queue,pipe和value+array外,还提供了更高层次的封装.使用multiprocessing.Manager可以简单地使用这些高级接口. Manager()返回的manager对象控制了一个server进程,此进程包含的python对象可以被其他的进程通过proxies来访问.从而达到多进程间数据通信且安全. Manager支持的类型有list,dict,Namespace,Lock,RLock,Semaphore,BoundedSemaph

  • 详解Laravel视图间共享数据与视图Composer

    1.在视图间共享数据 除了在单个视图中传递指定数据之外,有时候需要在所有视图中传入同一数据,即我们需要在不同视图中共享数据.要实现这一目的,需要使用视图工厂的share方法. 全局帮助函数view和response类似,如果传入参数,则返回Illuminate\View\View实例,不传入参数则返回Illuminate\View\Factory实例.所以我们可以通过在服务提供者的boot方法中使用如下方式实现视图间共享数据: <?php namespace App\Providers; use

  • Android实现不同apk间共享数据的方法(2种方法)

    本文实例讲述了Android实现不同apk间共享数据的方法.分享给大家供大家参考,具体如下: Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux用户(Android 系统是基于Linux)的. 所以不同APK(用户)间互相访问数据默认是禁止的. 但是它也提供了2种APK间共享数据的形式: 1. Share Preference. / Content Provider APK可以指定接口和数据给任何其他APK读取. 需要自己实现接口和Sh

  • C++进程间共享数据实例

    本文实例讲述了C++进程间共享数据的实现方法,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: int main(int argc, char *argv[])  {      //RecursiveDelete("C:\\20_128\\");      //SelfRun("runModel");      //进程间内存共享      LPCTSTR lpName= "hello";      LPCTSTR lpConten

  • Docker中容器数据卷(Data Volume)和数据管理详解

    卷(Volume) 众所周知卷(Volume)是容器中的一个数据挂载点,卷可以绕过联合文件系统,从而为Docker 提供持久数据,所提供的数据还可以在宿主机-容器或多个容器之间共享.通过卷,我们可以可以使修改数据直接生效,而不必重新构建镜像. 一.数据卷 数据卷是一个可以绕过联合文件系统的,专门指定的可在一或多个容器间共享目录.卷为提供为持久化或共享数据提供了一些有用的特性. 数据卷设计的初哀是提供持久化数据,而与容器的生命周期无关.因此,在删除容器时,Docker不会自动删除卷,直到没有容器再

  • docker中容器数据卷volume介绍

    目录 docker 容器数据卷volume 使用数据卷 方式一:直接使用命令挂载 -v 方式二:Dockerfile 数据卷容器 总结 docker 容器数据卷volume 如果数据都在容器中,那么我们删除容器的时候数据就会丢失,所以我们希望数据可以持久化. 例如MySQL容器,我们希望数据可以存储在本地,当MySQL容器删除的时候,数据不会丢失. 容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地,这就是卷技术.也就是数据挂载技术,将我们容器内的目录,挂载到Linux上

  • laravel多视图共享数据实例代码

    目录 前言 在视图间共享数据 视图Composer 添加 Composer 到多个视图 总结 前言 在做项目中,网站前台或者后台有些数据需要在多个视图页面使用,例如用户基本信息数据,菜单展示数据.首先想到的是在每个控制器里传入这些需要的数据,但显然这并不科学.经查视图文档了解,可以使用视图间共享数据和视图Composer解决. 在视图间共享数据 有时候我们需要在所有视图之间共享数据片段,这时候可以使用视图工厂的 share 方法,通常,需要在服务提供者的 boot 方法中调用 share 方法,

  • docker --link容器互联的实现

    目录 容器互联 实验:tomcat连接mysql 创建启动mysql容器 创建启动tomcat容器--link连接mysql容器 –link可以通过容器名互相通信,容器间共享环境变量. –link主要用来解决两个容器通过ip地址连接时容器ip地址会变的问题. 容器互联 先创建启动mysql容器 docker run -dti --name db --restart=always -e MYSQL_ROOT_PASSWORD=redhat -e MYSQL_DATABASE=blog  mysql

随机推荐