《企业级容器云架构开发指南》—1.3 脱颖而出的容器技术
1.3 脱颖而出的容器技术
1.3.1 容器技术的历史
X86上的虚拟机技术与容器技术基本上是并行独立发展的,初期虚拟机技术占上风,到了2005年,容器技术开始慢慢脱颖而出。容器技术的发展离不开谷歌的推动,我们一直以为Docker公司是容器技术的领头羊,但实际上谷歌才是容器技术真正的幕后推手。
谷歌的整个生产系统中一直没有使用虚拟机技术,而是全部采用容器技术来支撑。在2015年的EuroSys会议上,谷歌公布了多年以来的容器集群方面的秘密:谷歌早些年构建了一个管理系统,它可以用来管理集群、容器、网络以及命名系统。第一个版本被称为Borg,后续版本称为Omega。目前每秒会启动大约7 000个容器,每周可能会启动超过20亿个容器。利用多年在大规模容器技术上的实践经验和技术积累,谷歌构建了一个基于Docker容器的开源项目Kubernetes,借此奠定了自己在容器界的霸主地位。
2006年KVM开始发展,随后谷歌也开源了容器的底层核心技术Cgroups,Cgroups随后被纳入Linux内核中,接下来的开源项目LXC (Linux Container)提供了创建Linux容器的一站式API封装,从此之后,容器技术开始被大家所关注,而Docker早期就采用了LXC项目来完成具体容器的创建过程。但LXC技术对环境的依赖性很强,在一台机器上用LXC打包出来的镜像,如果迁移到别的机器上运行就会出现问题。所以,容器技术一直没有流行开来,Docker的出现彻底改变了容器技术的尴尬状况。Docker对容器技术做了一次革命性升级,创建了自己一整套的分层文件系统,标准化了容器镜像,使容器化在不同的环境、不同的操作系统迁移的时候,完全不受外界环境的影响,提高了整个系统的可迁移性,使容器化技术真正成为可实用的技术,彻底解决了LXC迁移性、独立性、可管控性的问题。于是2013年以Docker为代表的容器技术开始爆发,从此以后,Docker成为容器技术的代言人。
2015年也成为容器化发展历程上的一个重要里程碑,全球容器化标准组织云原生计算基金会(Cloud Native Computing Foundation,CNCF)正式成立,这是由谷歌策划、Linux基金会支持的一个新组织,旨在推动容器技术标准化发展。2016年,微软在其Windows Server 2016操作系统版本里首次支持Docker,解决了基于Windows系统使用容器的难题。这样一来,未来Docker不仅可以运行在Linux上,也可以在Windows上运行,我们可以看到,容器正在改变整个世界,不管是什么样的操作系统,容器技术都已经开始得到支撑。
提到容器,我们经常会碰到一个问题:容器和虚拟机真正的区别是什么?图1-7很好地解释了虚拟机和容器的区别。
图1-7左侧是虚拟机,我们看到,虚拟机需要一个完整的操作系统,而容器则是共享同一个宿主机的操作系统,因此容器是非常轻量级的,容器里面仅仅包括相关的用户代码和所依赖的类库,因此容器也被称为是进程级的虚拟化。在一个操作系统上建立一个容器,实际上就相当于在一个操作系统上建立一个应用,因此它的启动速度和响应速度与虚拟机完全不在一个层面上。
另外,两者打包的镜像尺寸大小也不同,因为要包含一个完整的操作系统和各种类库,所以虚拟机的镜像非常大,一个生产环境中的虚拟机的镜像经常超过1 GB,但是容器化镜像通常只有几十到几百兆。此外,镜像大小会大大影响整个系统弹性伸缩和快速部署的速度,例如,容器可以实现秒级的快速弹性伸缩,最主要的原因就是它的镜像尺寸比虚拟机要小很多,很快就能通过网络下载到目标机器并启动起来,而虚拟机可能仅仅下载镜像就需要几分钟,甚至更长的时间。
容器也可以部署在虚拟机上,那么,容器直接部署在物理机上还是部署在虚拟机上好?这是目前业界经常争论的焦点,目前的容器尤其是电信行业的容器,一般部署在裸机上,因为在虚拟机上部署容器会经过两层的虚拟化,网络I/O和存储I/O都会受到很大的影响,因此建议容器尤其是关键类的应用最好部署在裸机上,这样在管理上、扩展上就完全没有障碍。但是如果公司内部已经有基于虚拟机的私有云平台,在上面部署容器也没有太大问题,不过需要将性能损耗考虑其中。
- 点赞
- 收藏
- 关注作者
评论(0)