回想一下我们学了两种存储方式:storage driver和data volume,其中又分为bind mount和docker managed volume,我们知道storage driver就是镜像层和容器层的组合,在我们学习data volume时我们知道data volume其实就是host上面的文件或者是目录,给mount到容器中的,我们可以在host上直接更新容器的内容,这种方式实现了容器与host之间的共享存储

共享存储分为:容器与host之间

容器与容器之间

1。容器与host共享数据

我们学了两种类型的data volume,他们均能实现容器与host之间的共享数据,但方式有所区别:

bind muount:可以直接将要共享的目录mount到容器,例如:docker run -d -v /mnt/docker:/usr/lib/apache2/htdocs httpd

docker managed volume:就要麻烦些,由于volume位于host中的目录是容器在启动的时候才生成的,所以需要将共享的数据拷贝到volume中

在host下的/var/lib/docker/volumes/*****/_data下新建了一个文件,我们进入容器中,在相应的目录中可以看到新建的文件

当我们在容器中相应的挂载点增加一个文件时,我们在host上也是可以看到的,这就实现了数据共享!

可以利用docker cp这个命令在容器与host之间进行数据拷贝

2.容器之间共享数据

bind mount方法:就是将共享数据全部放在同一个bind mount中

新建三个容器,使其全部使用同一个bind mount

访问三个容器的httpd主页,内容一致

对host上的bind mount进行更新

三个容器中的内容也同时被更新了

当我们对其中一个容器进行更新的时候,其他容器的内容是否会被更新?host上的bind mount内容是否会被更新?

根据实验的效果来看,当我们更改其中一个容器的内容时,所有的容器的共享内容全部被改变,实现了容器之间的数据共享。

用volume container共享数据

volume container是专门为其他容器提供volume 的容器,它提供的卷可以是bind mount,也可以是docker managed volume

这里执行的是docker create:因为volume container是专门用来提供数据的,它本身不需要处于运行状态

这里通过-v的参数,mount了两个volume:

1.bind mount,存放web server的静态文件

2.docker managed volume存放一些实用工具

通过docker inspect可以查看到两个volume

其他容器可以通过--volumes-from来使用volume这个容器提供的volume

通过docker inspect查看容器volume

经过查看,3个容器使用的是相同的volume

进行测试:

三个容器已经共享了volume container中的volume

volume container的特点:

1.与bind mount相比不用为每个容器指定host path,所有容器在volume container中定义好了,容器只需要在volume container中进行关联

2.使用volume container的容器期mount point是一致的,有利于配置的规范和标准化,但也带来一定的局限,使用时综合考虑!

3.volume container的数据其实还是在host上面,只是通过volume container统一获取。

data-packed volume container实现数据共享

无论是通过bind mount还是volume container,数据都是host上,是否可以提供一个容器来存储共享的数据,并且在容器间实现共享呢?

可以通过data packed volume container的方式:原理就是将数据打包到镜像,然后通过docker managed volume共享。

首先通过dockerfile创建镜像:

ADD:将host下的htdocs添加到/usr/local/apache/htdocs

VOLUME:和-v具有相同的效果,用来创建docker managed volume,通过docker managed volume的方式,再将数据复制到docker managed volume自动创建的volume中

用新镜像创建data-packed volume container

启动容器并使用data-packed volume container

容器能够读取volume的数据

通过docker inspect查看容器的volume

我们可以看到:虽然说data-packed volume contaniner不依赖host,但是还是在host创建了一个/var/lib/docker/volume/*******/_data/index.html

而且当我们删除这个目录的时候,http是无法访问的

这一块还是需要继续研究:容器到底如何脱离host,实现容器间的数据共享?

---恢复内容结束---

centos7下安装docker(13.2容器数据共享)的更多相关文章

  1. centos7下安装docker(19容器架构)

    What,Why,How What:什么是容器? 说起容器大家想到的是什么?      集装箱(container),虚拟机,docker,k8s 1. 没毛病,因为容器与集装箱的英文都可以翻译成co ...

  2. centos7下安装docker(11容器操作总结)

    这段时间主要是学习了对容器的操作,包括:容器的状态:start,stop,restart,rename,pause,unpause,rm,attach,exec,kill,logs:还学习了对容器的资 ...

  3. centos7下安装docker(10容器底层--cgroup和namespace)

    cgroup和namespace是实现容器底层的重要技术 cgroup:实现资源限制 namespace:实现资源隔离 1.cgroup:control group Linux操作系统通过cgroup ...

  4. centos7下安装docker(9容器对资源的使用限制-内存)

                  一个docker Host上面会运行若干容器,每个容器都需要CPU,内存和IO资源.容器提供了控制分配多少CPU,内存给每个容器的机制,避免摸个容器因占用太多资源而影响其他 ...

  5. CentOS7下安装docker(Docker系列1)

    CentOS7下安装docker 系统要求 为了安装docker,需要准备 64-bit的CentOS 7 删除非官方的Docker包 yum的仓库中有一个很旧的Docker包, 现在Docker官方 ...

  6. docker(一) Centos7下安装docker

    docker(一) Centos7下安装dockerdocker(二) windows10下安装dockerdocker(三) 镜像和容器常用命令 docker(四) 使用Dockerfile构建镜像 ...

  7. centos7下安装docker与镜像加速

    1.背景 centos7下安装docker 2.安装 第一步:检查是否为centos7版本 第二步:依赖环境安装 执行如下两个命令: yum -y install gcc yum -y install ...

  8. centos7 下安装docker报错:You could try using...

    搞了台VPS,想要装docker,发现死活装不上,各种报错.之前系统是centos6,发现官方现在已经不支持centos6了,遂升级到centos7,然后还是出现下面这个错误. Error: Pack ...

  9. centos7下安装docker(13.4容器volume总结)

    最近我们学习了docker 存储,首先docker存储有两种:storage driver和data volume. storage driver是由镜像层和容器层组成的,可以通过docker ins ...

随机推荐

  1. springboot + freemarker 实现国际化

    前言 写过一篇springboot+freemarker国际化过程中的细节问题,但没有写过具体的国际化实现过程.正好有人在问,我就把我实现的过程贴出来,即使自己知识的一个备份,如果对别人有点用,那是再 ...

  2. windows下mongodb基础玩法系列二CURD附加一

    windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...

  3. [Luogu 3613] 睡觉困难综合征

    Description 给定一棵 \(n\) 个点的树,每个点上有位运算 \(opt\) 和一个权值 \(x\),位运算有 &,|,^ 三种. 要求支持: 修改点 \(v\) 的 \(opt\ ...

  4. KVM虚拟化原理与基础应用示例

    一.KVM简介 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调 ...

  5. APiCloud学习

    端API调用 核心模块在 window.api 对象下,默认提供该模块,不需要单独引用. 扩展模块在相应的模块对象下(例如:文件系统模块在fs对象下),需要require引入(var fs = api ...

  6. CheckBox-复选框-删除-选中行

    <!--删除选中的行,利用oTable.deleteRow(i)方法--> <!DOCTYPE html> <html xmlns="http://www.w3 ...

  7. VB.Net DataSet 填充資料庫內容

    '導入命名空間Imports System.Data.OleDb '定義變量 Dim ds As DataSet = New DataSet() Dim i, cn As Integer Dim Sq ...

  8. [PHP] 算法-合并两个有序链表为一个有序链表的PHP实现

    合并两个有序的链表为一个有序的链表: 类似归并排序中合并两个数组的部分 1.遍历链表1和链表2,比较链表1和2中的元素大小 2.如果链表1结点大于链表2的结点,该结点放入第三方链表 3.链表1往下走一 ...

  9. [javaEE] Servlet的手动配置

    一.Servlet sun提供的一种动态web资源开发技术,本质上就是一段java小程序,可以将Sevlet加入到Servlet容器中 *Servlet容器 -- 能够运行Servlet的环境就叫做S ...

  10. Mybatis逆向工程生成po、mapper接口、mapper.xml

    Mybatis逆向工程生成po.mapper接口.mapper.xml 一.新建一个maven工程 请查看我的另一篇博客:<使用idea创建一个maven工程> 二.引入所需依赖 需要my ...