Docker已死?听听他怎么说
2020年底,Kubernetes在当时最新的Changelog中宣布,自V1.20后将弃用Docker,一石激起千层浪。Docker镜像不能用了?Podman难道要取Docker而代之?
此后唱衰Docker的消息不绝于耳。《Istio实战指南》作者,ServiceMesher.com管理委员会核心成员马若飞老师,让他来谈谈,Docker现如今是什么情况?
为什么需要虚拟化技术
对于个人而言,虚拟机在个人演示,备份,隔离方面都有很重要的应用,小开依稀记得大学毕业做毕业设计要用到Siemens的WinCC与Step7,但Siemens的软件是不支持Windows10的。为了不重新做系统,小开用VMM虚拟了一个Windows7系统,顺利完成了毕业设计。
对于企业而已,虚拟化技术显得更为重要,它是一种资源管理技术,更是重新组织系统资源的一种手段,以JavaWeb应用为例,如果你想将代码部署到虚拟机上,需要经历三个步骤
-编译成war包
-在VM或云主机部署一个webserver,如Tomcat
-上传(scp)war包到VM
但这里就引申出一个问题,如果你在多个环境中部署多个应用,该怎么办?
这时,PaaS的出现解决了以上的问题,PaaS提供了一套完整的应用打包和分发机制和沙盒(容器)隔离应用。但是PaaS也有自己的问题
-需要为不同语言、不同框架、不同版本维护一个包
-本地能运行的应用(包),部署后不能运行,需要额外修改环境、配置
-应用一键部署,环境需要维护
眼看它起高楼,眼看它楼塌了
2013年前,Docker还是一个默默无闻的小公司,此时还是PaaS的天下,前面我们提到过PaaS平台最大的问题是环境维护成本过高,Docker击败PaaS的杀手锏是Docker镜像将应用与环境整体打包镜像到任何实例中,通过这种降维打击,Dcoker单方面宣布了Paas平台的结束。
Docker大红大紫后很快表现出来在商业化方面的野心。2014年,Docker发布容器编排工具Swarm,Docker不仅仅想做幕后英雄,它想构建自己的生态,Swarm此后成为经营Docker生态的抓手。
然而,Swarm的发布却得罪了Docker最大的贡献者CoreOS,2014年底CoreOS推出自己的RKT容器。
同年,现如今的业界霸主Kubernetes发布,得益于依托Google多年经验沉淀,Kubernetes凭借全新的设计理念,如声明式API等方式避免与Docker正面接触,逐渐蚕食Swarm市场份额。
前有劲敌追赶,但此时Docker在商业化方面却昏招迭出,针对Docker这个顶级的开源项目,Docker公司采取强势的商业策略,甚至出现了一言堂的情况。
为了对抗Docker强硬的政策,大批厂商纷纷倒戈。于此同时,云原生基金会(CNCF)成立,这加速了Kubernetes生态构建。此时,Kubernetes凭借开放民主的策略,已经成为容器领域炙手可热的应用。
时间来到2017年,Docker公司宣布Docker将内置Kubernetes,这意味着Docker已经臣服于Kubernetes。2020年9月,Docker宣布放弃更新Swarm。
同年年底,业界发生了一颗重磅炸弹,Kubernetes宣布放弃对Docker运行时的支持。这意味着,Kubernetes单方面宣布了对Docker商业战争的胜利,就如同当年Docker革了PaaS平台的命一样。
诚然,Docker目前依然是最流行的容器构建工具,用户人群非常庞大。但就如那句名言,老兵不死,只是逐渐凋零。
眼看它起高楼,眼看它宴宾客,眼看它楼塌了!
Docker底层技术
Docker底层引擎技术是一个典型的C/S架构的多组件应用,分为Server端dockerd和Client端CLI,中间层是RestAPI。如果我们分析Docker底层核心技术,可以发现借鉴了很多Linux/Unix的技术
-namespace
-cgroup
-rootfs/UnionFS
namespace做隔离,通过限制容器只能看到一部分的资源。cgroup主要功能是资源限制,通过对进程做资源限制,使进程只能使用一部分系统资源,比如CPU,磁盘,网络带宽等。而rootfs/UnionFS是基于Linux的联合文件系统。 简单来说,我们可以把容器看作一个由namespace和cgroup构成的运行时的隔离环境。
Docker常用命令
讲师介绍
马若飞,就职于某跨国互联网公司,负责核心业务系统的微服务架构、云原生应用的落地工作。AWSContainerHero,《Istio实战指南》作者,人民邮电出版社IT专业图书专家顾问。中国最大的服务网格社区ServiceMesher.com管理委员会核心成员,云原生社区VIP,Istio.iocontributor。研究方向为微服务、ServiceMesh、云原生技术。