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

来源:脚本之家  责任编辑:小易  

sshd方法可能是最简单的连接容器的方法,而且大多数用户习惯通过ssh连接虚拟机。另外,连接容器时你也不需要一定使用root权限。不过,对于是否一个容器是否应当管理不止一个进程仍然存在许多争议。这种方法最终使得每个容器了多了一个sshd进程,这从根本上来说不是进程虚拟化的所提倡的。另外三种方法都需要root权限。到0.8.1版本为止,Docker都是使用LXC来管理容器的。正是由于这个原因,使用lxc-attach连接容器就非常容易。不过从版本0.9.0开始Docker服务就必须使用-e lxc选项启动才能在内部支持LXC管理容器。不过,由于设置了这个选项,Docker将再次依赖LXC,而LXC可能随着发布或者安装的不同可能被剔除www.zgxue.com防采集请勿采集本网。

volume是什么

从util-linux版本2.23开始,nsenter工具就包含在其中。它用来访问另一个进程的名字空间。nsenter要正常工作需要有root权限。很不幸,Ubuntu 14.4仍然使用的是util-linux版本2.20。安装最新版本的util-linux(2.24)版,请按照以下步骤: 为了连接到容器,你还需要找到容器的第一个进程的PID。

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

Docker 是属于容器服务的一种,是一个开源的应用容器引擎。传统的容器技术没有成为主流的原因,是因为其未能提供标准化的应用运行时环境,而以Docker为代表的新一代容器技术,从一开始就以提供标准化的运行时环境为目标,真正做到“build once,run anywhere”(一次建立,到处运行)。docker

为什么要进行数据共享

Docker容器连接 端口映射并不是唯一把 docker 连接到另一个容器的方法。docker有一个连接系统允许将多个容器连接在一起,共享连接信息。docker连接会创建一个父子关系,其中父容器可以看到子容器的信息。

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

首先你要把容器运行起来,在使用docker attach+容器名/ID就进入容器了。docker pull下来的可能无法进入,自己可以Pull一个centos的镜像,并使用这个镜像创建一个容器,再使用docker attach+容器名/ID进入。

数据共享原理

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

实现数据共享的解决方案

说到数据共享我们其实很容易想到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 tomcatdocker 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是一样的,具体使用哪个根据实际情况而定

安装Docker借助apt-get命令,安装Docker是件轻而易举的事。sudo apt-get install docker.io为了允许非根用户也可以运行Docker,将你自己添加到docker群组。下面这个命令会允许当前用户运行Docker,无需根用户权限。sudo usermod-a-G docker$USER退出,然后重新登录,以激活群组成员的变化。下一步,编辑Docker配置文件,以便更新Docker二进制代码的位置。sudo vi/etc/default/docker.io DOCKER="/usr/bin/docker.io重启Docker服务。sudo service docker.io restart管理Docker容器如果你想启动Ubuntu操作系统的一个新的Docker容器,首先需要获取Ubuntu Docker映像文件。下面这个命令会通过网络下载Docker映像文件。docker pull ubuntu你可以以一种交互模式来开启Ubuntu Docker,如下所示。最后一个参数“/bin/bash”是一旦启动就将在容器里面执行的命令,这里是一个简单的bash外壳命令。docker run-i-t ubuntu/bin/bash更多详细信息你可以参考官方手册https://docs.docker.com/内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • docker创建容器时目录权限踩坑
  • docker compose自定义网络实现固定容器ip地址
  • vmware中的ubuntu docker安装(容器搭建)
  • docker for windows 容器内网通过独立ip直接访问的方法
  • 删除docker里建立容器的操作方法
  • 详解docker中安装配置oracle数据库
  • 使用docker部署spring boot的实现方法
  • docker安装运行apache2服务器做图片服务器的方法
  • docker中mysql初始化及启动失败问题解决方案
  • docker容器挂载宿主主机目录的操作方法
  • 详解docker 配置国内免费registry mirror
  • centos7下安装与卸载docker应用容器引擎的方法
  • docker中dockerfile方式建立镜像helloworld
  • docker系列之使用docker compose编排容器
  • docker registry安装简单命令实现
  • 如何进入 Docker 容器
  • 如何进入 Docker 容器
  • 如何进入 Docker 容器
  • 如何进入 Docker 容器
  • 如何进入 Docker 容器
  • docker和容器的区别?百度知道
  • 如何连接Docker各容器
  • 如何进入 Docker 容器
  • 如何查看docker 里某个容器的的启动命令
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全dockerhyper-vvmwarevirtualboxxenserverkvmqemuopenvzxencloudstackopenstack云计算技术云其它首页服务器云和虚拟化dockerdocker创建容器时目录权限踩坑docker compose自定义网络实现固定容器ip地址vmware中的ubuntu docker安装(容器搭建)docker for windows 容器内网通过独立ip直接访问的方法删除docker里建立容器的操作方法详解docker中安装配置oracle数据库使用docker部署spring boot的实现方法docker安装运行apache2服务器做图片服务器的方法docker中mysql初始化及启动失败问题解决方案docker容器挂载宿主主机目录的操作方法详解docker 配置国内免费registry mirrorcentos7下安装与卸载docker应用容器引擎的方法docker中dockerfile方式建立镜像helloworlddocker系列之使用docker compose编排容器docker registry安装简单命令实现docker 清理命令集锦docker 给运行中的容器设置端口映ubuntu14.04+docker的安装及使用docker获取镜像报错docker: errodocker.service启动失败:unit ndocker容器如何优雅的终止详解centos7 安装docker 解决启动不了详解docker国内镜像拉取和镜像加浅谈docker-compose网络设置之nedocker如何固定ip设置的方法centos7搭建docker私人仓库的方法(kuberkubernetes1.5.2升级到kubernetes1.10一些搭建docker内网私服的方法(docker-regis常用的docker基本命令及用法汇总docker compose 网络设置详解用docker作为paas的替代方案是否完美无缺docker拉取镜像的完整步骤docker 多主机网络通信详细介绍如何利用docker容器实现代理转发与数据备linux下docker安装和使用教程
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved