容器与 host 共享数据

我们有两种类型的 data volume,它们均可实现在容器与 host 之间共享数据,但方式有所区别。

对于 bind mount 是非常明确的:直接将要共享的目录 mount 到容器。具体请参考前面 httpd 的例子,不再赘述。

docker managed volume 就要麻烦点。由于 volume 位于 host 中的目录,是在容器启动时才生成,所以需要将共享数据拷贝到 volume 中。请看下面的例子:

容器之间共享数据

第一种方法是将共享数据放在 bind mount 中,然后将其 mount 到多个容器。

第二种方法是用 volume container 共享数据

colume container 是专门为其他容器提供 volume 的容器。

我们将容器命名为 vc_data(vc 是 volume container 的缩写)。注意这里执行的是 docker create 命令,这是因为 volume container 的作用只是提供数据,它本身不需要处于运行状态。容器 mount 了两个 volume:

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

"Mounts": [{"Source": "/root/htdocs","Destination": "/usr/local/apache2/htdocs","Mode": "","RW": true,"Propagation": "rprivate"},{"Name": "1b603669398d117e499449862636a56c4f4c804d447c680e7b3ba7c7f5e52205","Source": "/var/lib/docker/volumes/1b603669398d117e499449862636a56c4f4c804d447c680e7b3ba7c7f5e52205/_data","Destination": "/other/useful/tools","Driver": "local","Mode": "","RW": true,"Propagation": ""}],

其他容器可以通过 --volumes-from 使用 vc_data 这个 volume container:

web1 容器使用的就是 vc_data 的 volume,而且连 mount point 都是一样的。验证一下数据共享的效果:

第三种方法

volume container 的数据归根到底还是在 host 里,有没有办法将数据完全放到 volume container 中,同时又能与其他容器共享呢?当然可以,通常我们称这种容器为 data-packed volume container。其原理是将数据打包到镜像中,然后通过 docker managed volume 共享。

我们用下面的 Dockfile 构建镜像:

ADD 将静态文件添加到容器目录 /usr/local/apache2/htdocs。
VOLUME 的作用与 -v 等效,用来创建 docker managed volume,mount point 为 /usr/local/apache2/htdocs,因为这个目录就是 ADD 添加的目录,所以会将已有数据拷贝到 volume 中

build 新镜像 datapacked:

用新镜像创建 data-packed volume container:

因为在 Dockerfile 中已经使用了 VOLUME 指令,这里就不需要指定 volume 的 mount point 了。启动 httpd 容器并使用 data-packed volume container:

容器能够正确读取 volume 中的数据。data-packed volume container 是自包含的,不依赖 host 提供数据,具有很强的移植性,非常适合 只使用 静态数据的场景,比如应用的配置信息、web server 的静态文件等。

容器学习 之 共享数据(十六)相关推荐

  1. 深度学习入门笔记(十六):计算机视觉之边缘检测

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  2. 窗口消息——Windows核心编程学习手札之二十六

    窗口消息 --Windows核心编程学习手札之二十六 Windows允许一个进程至多建立10000个不同类型的用户对象(user object):图符.光标.窗口类.菜单.加速键表等,当一个线程调用一 ...

  3. OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算

    OpenCV学习笔记(四十六)--FAST特征点检测features2D 特征点检测和匹配是计算机视觉中一个很有用的技术.在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用.这一次先介绍特征点检 ...

  4. OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC

    OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...

  5. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  6. VTK学习笔记(三十六)VTK图像填充

    VTK学习笔记(三十六)VTK图像填充 1.官方示例 2.其他例子 总结 1.官方示例 来自官方示例代码,自己只是添加了理解. 代码: #include <vtkCamera.h> #in ...

  7. 深度学习入门(五十六)循环神经网络——循环神经网络RNN

    深度学习入门(五十六)循环神经网络--循环神经网络RNN 前言 循环神经网络--循环神经网络RNN 课件 潜变量自回归模型 循环神经网络 使用循环神经网络的语言模型 困惑度(perplexity) 梯 ...

  8. OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast

    OpenCV学习笔记(五十六)--InputArray和OutputArray的那些事core 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArray或者OutputArray ...

  9. 深度学习之图像分类(十六)-- EfficientNetV2 网络结构

    深度学习之图像分类(十六)EfficientNetV2 网络结构 目录 深度学习之图像分类(十六)EfficientNetV2 网络结构 1. 前言 2. 从 EfficientNetV1 到 Eff ...

最新文章

  1. java_spring_依赖注入(构造器)
  2. PL/SQL复合数据类型
  3. 二进制码转十进制java,Java将二进制转换为十进制
  4. cacti添加apache监控模板
  5. oracle索引大小暴增_Oracle创建索引前估算索引大小(dbms_space.create_index_cost)
  6. LA 6047Perfect Matching(回文串哈希)
  7. Jupyter Notebook使用
  8. 普通学校,非科班,从电脑小白到大厂offer的自学之路
  9. 机器学习与算法(6)--学习矢量化
  10. EXCEL工作表保护密码破解
  11. Trend Micro 趋势科技
  12. 利用pandas将Excel分组比较获取差集并
  13. 笔记(待续)-动力学逆问题相关基础知识
  14. 智能变电站无线监测系统
  15. PowerBuilder命令行编译详解[1]
  16. 5款好用的电脑软件!
  17. 自己动手写工具:百度图片批量下载器
  18. NVIDIA官方中文版GPU编程指南v2.20(转载自GZeasy)
  19. 润乾报表通过JS自带函数来实现自动计算中的四舍五入
  20. 赵小楼《天道》《遥远的救世主》深度解析(95)人、性、佛性、智慧的有迹可循

热门文章

  1. Windbg调试内核驱动方法
  2. 基于Windows Socket 的网络通信中的心跳机制原理
  3. Linux 权能综述
  4. 通过google app engine 在google cloud 部署支持quic的Java web 应用(多种方式)
  5. 腾讯TencentOS 十年云原生的迭代演进之路
  6. 阿里巴巴:全链路压测体系建设方案的思考与实践
  7. Apache Kafka 不需要管理员:删除 Apache ZooKeeper 的依赖
  8. 2019 年 8 月编程语言排行榜,Java涨幅不行!
  9. Spring Cloud Gateway 整合阿里 Sentinel网关限流实战
  10. Go基础编程:格式化输出、类型转换、类型别名