zoukankan      html  css  js  c++  java
  • centos7下安装docker(13.2容器数据共享)

    回想一下我们学了两种存储方式: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,实现容器间的数据共享?

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

  • 相关阅读:
    java基础语法
    MySQL5.7常用命令
    wireshark抓包分析---TCP/IP协议
    MySQL安全管理
    MySQL触发器
    MySQL存储过程和游标
    mysql实现远程登录
    Java中遍历Map对象的4种方法
    SSM-CRUD
    SSM整合-配置文件
  • 原文地址:https://www.cnblogs.com/lkun/p/7757667.html
Copyright © 2011-2022 走看看