博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker精华问答 | 多个 Docker 容器之间共享数据怎么办?
阅读量:2488 次
发布时间:2019-05-11

本文共 1598 字,大约阅读时间需要 5 分钟。

640?wx_fmt=png

在计算机技术日新月异的今天, Docker 在国内发展的如火如荼。特别是在一线互联网公司 Docker 的使用是十分普遍的,甚至成为了一些企业面试的加分项,那么今天我们继续关于Docker 的精华问答。

640?wx_fmt=gif1

Q:容器磁盘可以限制配额么? 

A:对于 devicemapper, btrfs, zfs 来说,可以通过 --storage-opt size=100G 这种形式限制 rootfs 的大小。640?wx_fmt=png

640?wx_fmt=gif2

Q:容器内的数据该保存在镜像里还是物理机里? 

A:如果所谓数据是指运行时动态的数据,那么这部分数据文件不应该保存于镜像内。在运行时要保持容器基础文件不可变的特性,而变化部分使用挂载宿主目录,或者数据卷来解决。

640?wx_fmt=gif3

Q:看到总说要保持容器无状态,那什么是无状态? 

A:这里说到的有两个层面的无状态:

容器存储层的无状态 

这里提到的存储层是指用于存储镜像、容器各个层的存储,一般是Union FS,如 AUFS,或者是使用块设备的一些机制(如 snapshot )进行模拟,如 devicemapper。Union FS 这类存储系统,相当于是在现有存储上,再加一层或多层存储,这类存储的读写性能并不好。并且对于 CentOS 这类只能使用 devicemapper 的系统而言,存储层的读写还经常出 bug。因此,在 Docker 使用过程中,要避免存储层的读写。频繁读写的部分,应该使用卷。需要持久化的部分,可以使用命名卷进行持久化。由于命名卷的生存周期和容器不同,容器消亡重建,卷不会跟随消亡。所以容器可以随便删了重新run,而其挂载的卷则会保持之前的数据。

服务层面的无状态 

使用卷持久化容器状态,虽然从存储层的角度看,是无状态的,但是从服务层面看,这个服务是有状态的。从服务层面上说,也存在无状态服务。就是说服务本身不需要写入任何文件。比如前端 nginx,它不需要写入任何文件(日志走Docker日志驱动),中间的 php, node.js 等服务,可能也不需要本地存储,它们所需的数据都在 redis, mysql, mongodb 中了。这类服务,由于不需要卷,也不发生本地写操作,删除、重启、不保存自身状态,并不影响服务运行,它们都是无状态服务。这类服务由于不需要状态迁移,不需要分布式存储,因此它们的集群调度更方便。

640?wx_fmt=gif4

Q:卷和挂载目录有什么区别? 

A:卷 (Docker Volume) 是受控存储,是由 Docker 引擎进行管理维护的。因此使用卷,你可以不必处理 uid、SELinux 等各种权限问题,Docker 引擎在建立卷时会自动添加安全规则,以及根据挂载点调整权限。并且可以统一列表、添加、删除。另外,除了本地卷外,还支持网络卷、分布式卷。

而挂载目录那就没人管了,属于用户自行维护。就必须手动处理所有权限问题。特别是在 CentOS 上,很多人碰到 Permission Denied,就是因为没有使用卷,而是挂载目录,而且还对 SELinux 安全权限一无所知导致。

640?wx_fmt=gif5

Q:多个 Docker 容器之间共享数据怎么办?NFS ? 

A:如果是同一个宿主,那么可以绑定同一个数据卷,当然,程序上要处理好并发问题。

如果是不同宿主,则可以使用分布式数据卷驱动,让分布在不同宿主的容器都可以访问到的分布式存储的位置。如S3之类。

640?wx_fmt=png

小伙伴们冲鸭,后台留言区等着你!

关于Docker ,今天你学到了什么?还有哪些不懂的?除此还对哪些话题感兴趣?快来留言区打卡啦!留言方式:打开第XX天,答:……

同时欢迎大家搜集更多问题,投稿给我们!风里雨里留言区里等你~

福利

1、扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

640?wx_fmt=jpeg

2、公众号后台回复:白皮书,获取IDC最新数据白皮书整理资料!

推荐阅读:

640?wx_fmt=png
真香,朕在看了!

转载地址:http://kcxrb.baihongyu.com/

你可能感兴趣的文章
HDU 2243 考研路茫茫——单词情结 求长度小于等于L的通路总数的方法
查看>>
D. Anton and Chess 模拟题 + 读题
查看>>
MongoDB学习笔记三:查询
查看>>
当前项目规划
查看>>
Amoeba for MySQL
查看>>
JS学习记录(BOM部分)
查看>>
深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling
查看>>
如何快速将文本中的tab更换成逗号(图文详解)
查看>>
Hadoop HBase概念学习系列之HBase里的客户端和HBase集群建立连接(详细)(十四)...
查看>>
Elasticsearch之分词器的工作流程
查看>>
Hadoop的多节点集群启动,唯独没有namenode进程?(血淋淋教训,一定拍快照)(四十五)...
查看>>
jdk1.6 改 jdk1.7或jdk1.8(改回也可以)(图文详解)
查看>>
OpenStack组件
查看>>
Windows下OpenSSL创建CA证书以及客户端和服务器端证书
查看>>
asp.net 动态创建TextBox控件 如何加载状态信息
查看>>
HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面...
查看>>
面试的问题 及回答
查看>>
一、Oracle介绍
查看>>
:after伪类+content经典应用举例
查看>>
antd-react-mobile(踩坑记录)
查看>>