写点什么

【ArchSummit 北京 2015】容器化与 Docker 实践过程中的利与弊

  • 2015-12-21
  • 本文字数:1470 字

    阅读完需:约 5 分钟

年度 IT 行业技术领域收官大会 ArchSummit 北京 2015 已于 12 月 19 日顺利闭幕。在 19 日进行的“UCloud 技术专场:企业容器化应用实践”活动中,来自 Coding、UCloud、大众点评的 3 位技术专家分享了各自在容器化以及 Docker 应用过程中所得到的经验与教训,其中内容涉及开发与运维、云数据、私有云平台与 Docker 的结合等多个方面,为其他容器技术以及 Docker 的实践者们提供了大量的技术参考与实践经验。

Coding 从今年 7 月份开始就开始逐渐将所有的服务都放在了 Docker Container 上运行,因此在 Docker 的使用也有很多心得可以分享。据 Coding 首席技术官孙宇聪介绍,Coding 已经做了 Docker 的库,维护自己的私有 Registry 基础镜像,以供开发和生产使用。Coding 还参与了 Docker 开发,比如 Upstream,提交过多份 Issue / Patch。另外 Coding 也自研了一套生产环境容器编排系统。

孙宇聪认为 Docker 技术真正重要的是四个部分——Packaging、Distribution、Runtime、Orchastration。使用 Docker,需要先明确自己能用哪个部分,因为这四个部分是结合比较紧密的,但不一定都是合适的。

Coding 在使用 Docker 的过程当中就出现了一些问题,比如发现 Docker image 是比较无用的。首先 Dockerfile 在 FROM、RUN、CMD / ENTRYPOINT 方面都有不同的问题,基础镜像可能基于各种不同的系统,配置文件也不再一起,运行方式更是奇怪,最后可能还是要自己写。Dockerfile 打包后生成的镜像会变得非常大,冗余的垃圾信息过多,需要很长的时间进行编译。

针对 Docker 使用过程当中出现的问题,孙宇聪表示通过大量的实践,发现一开始认为 Docker 解决了很多问题,后来发现原来是自己对这个问题的理解还不够。Docker 在 Build 和 Packaging 上带来的启发,是接口统一的重要性。不应该关心一个程序到底是怎么编译出来的,从运维层面来讲,只要接口统一就可以了,然后如何编译都是无所谓的,只要能实现出 Build 这个结果就可以了。

在 Coding 的实践中另外还发现,其实 Docker Registry 同样也不重要。这实际上只是一个 FTP,可能还不如自己做的 FTP 好用,本来列一个目录就足够了,现在还需要导一个 API,之前是用的 Registry V1,现在用的是 Registry V2,Registry V1 的客户端还不能访问 V2 的。

Docker Runtime 同样也有很多问题。Docker container 在 stdout 下的子进程 Docker Daemon 想要做的事情太多,导致 Docker Daemon 挂掉。Docker container 在 stdout/stderr 有大量数据传输会导致内存泄露,直至 Docker Daemon OOM。另外 Docker Daemon 在频繁创建 container 后,会在文件系统中遗留很多垃圾文件不清理,导致磁盘 inode 被耗尽。Docker 里面没有 init,Daemon 也没有 reap 子进程 fork 的很多进程,会在系统中出现很多僵尸进程,最终导致 Docker Daemon 出现问题。

对于 Coding 自研生产环境容器编排系统的需求,孙宇聪表示主要出于三方面的考虑,首先 Swarm、kubernetes、Mesos 都处于早期,跨步不能太大;其次,动态伸缩的需求并没有那么大,需要静态、手动的进行资源分配,而且 IaaS 也降低了这个需求;第三,对 Docker 容器的直接接管能力不足,真正需要的功能都没有。

Coding 在容器实践方面的关注点,总结起来主要有三点:第一是软件架构的升级——其实做容器化,最终就是软件升级,做微服务、无状态、数据执行分离,这些跟容器没有关系,容器化只是一种手段;第二是研发体系、环境管理理念的升级——容器化做成代码化、自动化比较容易一些,但它不是必要条件,同样可以用别的方式来做;第三是资源管理概念的升级——多留富余量,迁移能力比压榨能力更重要。

2015-12-21 04:121106

评论

发布
暂无评论
发现更多内容

客户案例|华律网,通过观测云大幅缩短故障定位时间

观测云

【刷题记录】3. 无重复字符的最长子串

WangNing

7月月更

从Starfish OS持续对SFO的通缩消耗,长远看SFO的价值

石头财经

浅尝不辄止系列之试试腾讯云的TUIRoom(上)

为自己带盐

7月月更 TUIRoom

Meta Force原力元宇宙系统开发佛萨奇模式

薇電13242772558

智能合约

Binder核心API

北洋

binder 7月月更

第四期SFO销毁,Starfish OS如何对SFO价值赋能?

BlockChain先知

redis你到底懂不懂之list

zxhtom

7月月更

小程序多种开发方式对比-跨端?低代码?原生?还是云开发?

字母哥哥

小程序

聊聊 Dart 的空安全 (null safety) 特性

岛上码农

flutter ios 安卓 跨平台开发 7月月更

docker镜像分层原理及容器写时复制

字母哥哥

Docker 镜像

消息队列与快递柜之间妙不可言的关系

字母哥哥

消息队列

大话云原生之灰度发布篇-从步行到坐缆车的自动化服务升级

字母哥哥

灰度发布 #Kubernetes#

kafka批量发送数据源码解析

字母哥哥

kafka 消息队列 源码解读

九章云极DataCanvas公司获评36氪「最受投资人关注的硬核科技企业」

九章云极DataCanvas

人工智能 投资人 36氪 九章云极DataCanvas 硬科技

AIRIOT助力城市管廊工程,智慧物联守护城市生命线

AIRIOT

低代码 物联网 低代码,项目开发

Java 9 缩小字符串( Compact String)

HoneyMoose

C++中的STL库函数之万能图——map

KEY.L

7月月更

每日一题——PAT乙级1002题

武师叔

7月月更

LinkedBlockingQueue源码分析-新增和删除

zarmnosaj

7月月更

Java 代码中数字中间带下划线是几个意思

HoneyMoose

tauri+vue开发跨操作系统的桌面应用

字母哥哥

rust Vue tauri

应用实践 | 数仓体系效率全面提升!同程数科基于 Apache Doris 的数据仓库建设

SelectDB

数据库 数据仓库 架构演进 Doris

Java 6 压缩字符串(Compressed String)

HoneyMoose

java Reactive Streams响应式流式编程

字母哥哥

Java 响应式编程

Http响应头处理

周杰伦本人

7月月更

Java多线程案例之任务定时执行器

未见花闻

7月月更

九章云极DataCanvas公司摘获「第五届数字金融创新大赛」最高荣誉!

九章云极DataCanvas

创新 数字金融 九章云极DataCanvas

Linux的小知识-curl命令

技术小生

Linux curl 7月月更

开源重器!九章云极DataCanvas公司YLearn因果学习开源项目即将发布!

九章云极DataCanvas

人工智能 开源项目 #Github 因果学习 #工具包

玩转Sonar

yinhaixiang

【ArchSummit北京2015】容器化与Docker实践过程中的利与弊_数据库_刘羽飞_InfoQ精选文章