Docker,运维的瑞士军刀or指甲刀?

前言

这几年,准确说应该是前几年,容器的浪潮席卷了整个互联网,Docker作为容器的领导者可谓风光无限。一时间几乎所有的互联网IT公司都要上Docker,招聘职位也多了各种“容器工程师”,各种公众号纷纷发表文章“微服务为什么一定要上Docker”云云。整个互联网行业对Docker的追捧有如大跃进一般的热情。当然,这其中也有个别不一样的声音,不过这声音太过微弱,完全淹没在这浪潮之中。

这一两年随着K8S的崛起,Docker的影响慢慢弱化,K8S渐渐主宰了容器帝国。现在看来,Docker只不过是那卒子,K8S才是那将军。

虽然这几年耳濡目染了Docker的各种传教,但作为一个运维人员,大部分时候对Docker实在是喜爱不起来,总结一句话:Docker在标准交付、环境一致性和资源隔离等方面所带来的优势,完全被它所带来的复杂性等问题所抵消了

一些前提声明

1、环境

在开始讨论之前,我觉得要先明确一下环境的具体含义。在一个软件从开发到上线的过程中主要包括三个环境:

  • 编译环境:将代码编译成可运行的应用程序的环境,不在我们的讨论范围之内。
  • 运行环境:让应用程序运行起来的环境。对于java应用来说,包括jdk版本、各种jar包等等;对于python应用来说,包括python版本、各种模块等等。
  • 业务环境:让业务逻辑正常提供服务的环境,这通常是别的应用来提供的,比如依赖的数据库、缓存、rpc服务等等。

在网上所有关于Docker的讨论中,所涉及的环境都是运行环境。而在后面的篇幅里会看到,业务环境的问题才是应用部署和运维要解决的主要问题

2、Docker的比较对象

还有一个需要澄清的地方,目前看到的几乎所有文章都将Docker与虚拟机作比较,因此得出了Docker要更轻量、更快速的结论。但是,站在运维的角度来看,无论原来的应用是部署在虚拟机还是物理机上,使用Docker以后,都是在原有的基础上在操作系统与应用程序之间加了一层Docker的封装。由此可以得出:从系统复杂性的角度来说,Docker(以及里面跑的应用程序)对应的是原来的应用程序(进程),它无疑增加了系统的复杂性

运维与Docker的目标

运维简单说就是管理应用的交付和运行维护。运维会有各种规范来尽量保证环境和配置的一致性。这些规范规定了服务器如何选型、安装什么操作系统、如何命名、如何安装应用、安装什么版本的数据库、要监控哪些东西、如何监控、如何告警等。保证环境一致性是运维人员的一项非常重要的工作内容。

Docker的设计目的是为了让应用程序能一次构建到处运行,实现原理简单说就是提供了一个类似于虚拟机的封装,但要轻量很多,应用运行在这个“虚拟机”里。在这一点上Docker与Java虚拟机类似。

不难发现,Docker的设计出发点是默认运行环境是不一致或者难以做到一致的,而且为了达到适配不同环境的通用性,必定会在某些方面有所牺牲。因此,在这个前提下设计出来的产品对于特定的场景肯定不会是最佳选择。

对于专业运维人员来说,在大多数场景中,完全能通过其他更简单更有效的方法来解决运行环境的一致性问题。

docker的优点

先来简单看一下目前业界普遍所认为的docker的优点:

1、环境一致性

准确来说,这里的环境指的是运行环境,即应用所依赖的运行环境全部打包在Docker镜像里了,无论拷贝到哪里都能马上运行起来。

2、标准交付

如果想要测试开源软件或者搭建开发环境,传统做法是下载源码、编译、配置、启动,对于比较安装部署比较复杂的软件,该过程可能会非常痛苦。而Docker能将整套系统打包到一个镜像里,我们只需下载镜像并运行即可。

3、资源隔离

Docker能限制每个容器的资源使用,确保容器不会抢占主机的资源。同样该特点有点像JAVA虚拟机,但Docker能够限制除内存外的CPU、磁盘IO等资源。

Docker的优点真的有优势吗?

可以看出来,这些优点都是确实存在的。但是,这些优点所适用的场景范围非常有限,来具体分析一下:

1、Docker真的能解决环境的问题吗?

Docker鼓励“一个容器一个进程(one process per container)”,这也是业界的普遍做法。这种情况下Docker解决的只是应用(进程)的运行环境问题。而现在的系统,特别是微服务架构,都是由多个应用相互调用来提供服务,作为业务环境的服务依赖问题才是环境的核心问题。有过一线运维经验的运维人员都知道,90%以上的各种环境问题都是业务环境的问题,而这个是Docker解决不了的。

2、生产环境交付无优势

同样是基于“一个容器一个进程”的原则,交付到生产环境时,传统方式完全可以做到标准交付,容器镜像的交付方式并无优势。而由于镜像文件比原来的应用要大很多,甚至会增加交付时间。

3、资源隔离优势不明显

一是Docker的隔离性不好,二是资源过度使用的问题有其他的方式来监控和预防。

docker带来的问题

1、复杂性

为了隔离现有业务网络,Docker虚拟出一个新的网络,增加了网络复杂性。表现在:

  • 增加了一个新的网段
  • 启用了原本不需要的iptables服务用于转发流量,该特性同时会降低网络性能

复杂性增加了,安全性势必会降低。

2. 性能损耗

前面提到过,从运维角度来看,Docker对应的是传统方式的应用程序(进程),因此,它必然会在CPU、网络IO及磁盘IO方面带来性能损耗。

3、成本增加

同样将Docker与传统方式应用进程对比来看,网上所说的Docker能节省成本简直是无稽之谈。Docker只会增加内存和磁盘空间使用的成本而不会减少。

Docker受追捧的原因

那么,为何Docker如此受互联网IT行业从业人员的追捧呢?我觉得有以下原因:

  • 降低了开发人员搭建开发测试环境和试用新软件的难度,提高了开发效率,因此开发人员在行业内对其广泛传播。
  • 云计算厂商和培训机构等对Docker等新技术(背后的商机)的推波助澜。
  • K8S的支持。有作为互联网巨头的谷歌公司的K8S支持,众信徒唯恐跟不上脚步。
  • 国内IT行业技术跟风严重,想做一件事的理由仅仅是因为别人做了。而在这个过程中,一些公司的老板起到了不可忽视的作用。
  • 没有反对意见或者反对意见很少,运维人员相对于开发人员来说数量上相差太多,人微言轻,意见得不到重视。

总结

最后,总结一下,对于开发人员来说,搭建开发环境或试验新软件,Docker能够发挥明显的优势,提高开发效率;但是对于运维人员来说,Docker所带来的复杂性超过了其优势,在大多数场景下,完全有更好的方案来解决Docker所要解决的问题。所以,Docker并不是运维的瑞士军刀,充其量只是一把指甲刀。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容