容器系列一:容器起源

 

摘要:

 

为了运行不同环境的App要把OS也加进来作为支撑环境,那么为了进一步容易管理和提升运行效率,能不能把OS这一层精简呢? 答案是可以,这就是容器要做的事情。

 

注:本期分享由代豪原创,有容云整理发布,转载请注明出处。

 

作者简介:

 

代豪,1984年接触编程, 开始用Basic写程序。独立承担过食糖期货交易系统开发及主要负责过高性能方面的项目,研发项目深入涉足通信、数据库、集群、高性能计算、网格计算、移动终端。

 

说到容器,这个概念现在非常火;实际上在IT领域内各种技术一直是逐步迭代演进的。

 

一.Windows系统方面

 

这里先从大家用的Windows说起,我们经常有这样的操作,打开一个Word进行文档编辑,然后又打开了另外一个程序的安装包Setup。 Ok,这样我们可以简单认为开了两个Windows进程,一个Word进程,一个Setup进程,那么可能存在的问题:

 

1.两个程序可以访问相同的资源,比如C盘上的数据,在编辑文档时,Setup进程占用CPU过高,影响编辑文档的体验。

2.Windows里有个注册表的东西,这个被搞乱会带来很多麻烦,Setup如果设计兼容性不好有可能把注册表搞乱。

3.对于开发者而言,如果写这两个程序的人或团队属于不同机构的,那么有可能产生配置冲突或兼容性的问题。

 

 

二.Linux系统方面

 

我们知道Linux系统有很多发行版本,比如CentOS,Ubuntu等,我们的应用有App1 for CentOS,也有App2 for Ubuntu的,现在我需要在一个OS里能跑App1和App2,怎么办?

而对于App1和App2的开发者需要编译出不同发行版的应用程序,for CentOS,for Ubuntu等。

对于开发者而言,一个程序写好测试过后,在最终的地用户环境里可能会产生环境不匹配而导致运行异常的问题。

 

三. 解决这些问题呢?

 

一个自然的想法就是”隔离”+”运行环境打包”,把各个程序或App及相应的运行环境打包交付成镜像,这样可以避免环境兼容的问题,又可以互补干扰和破坏,那么在一台机器上同时运行各个打包交付的镜像时就需要把把各个镜像隔离加载运行才能保证各个App的运行环境独立而不冲突。这里大家自然就会想到虚拟机,没错,虚拟机完全可以做这样的事情,每个镜像就是一个虚拟机文件,虚拟机的优势很明显。但我们现在只是希望在一台机器上高效运行多个程序,那么用虚拟机的方式缺点也很明显:

 

1.每个App镜像里需要包含一个OS,体积过大

 

一个机器运行多个不同环境的App需要多个OS虚拟机,管理和运行的效率成问题。

 

我们看到这里的主要矛盾是为了运行不同环境的App要把OS也加进来作为支撑环境,那么为了进一步容易管理和提升运行效率,能不能把OS这一层精简呢? 答案是可以,这就是容器要做的事情。

 

精简OS这一层,各个App执行环境共享OS是一个有效的方法,我们先看看Linux为什么能做到这一点。实际上现在的Linux可以理解为两部分,一是内核,一是发行环境。比如我们说的CentOS,Ubuntu,RedHat等,就是指的发行环境。大家都在相同的Linux内核的外围发行自己的管理执行程序,各个发行版本就是目前的CentOS,Ubuntu等,这时候解决方法就来了:就是提供多个发行环境共享一个Linux内核的功能。

 

好,这时候容器的概念就出来了:Linux容器可以理解为多个发行环境共享一个内核,因此各容器可以有不同的发行环境(如CentOS,Ubuntu,…),但只有一个共同的内核,所以你不能启动一个其它内核的运行环境(如Windows),如果你需要运行一个CentOS环境的容器和一个Windows环境的容器,这时你需要的就是虚拟机了,而不是容器,或者说需要带有虚拟机内核功能的容器了,再就是你的发行环境里需要地内核版本功能版本比容器地共享内核版本高也会有问题,那么需要升级你的共享内核,也就说简单了容器就是共享OS内核的隔离支撑环境,那么Linux容器的基本核心功能有:

 

1.)文件系统隔离,每个容器运行在完全独立的根文件系统里。

2.)网络隔离,每个进程容器在自己的网络命名空间里,拥有自己的虚拟接口和网络地址。

3.)资源隔离,为每个进程容器分配不同系统资源,如CPU,Mem,IO等。

 

再看看Windows,上述的三点同样需要,不同的是大家都知道Windows里有个注册表,这个对Windows而言非常重要,因此Windows的容器对这个问题自然不能回避,那么Windows容器是如何解决这个问题的呢? Windows有一个主机注册表,容器里的注册表继承它,但修改时容器自己保存了自己对注册表的修改部分,那么容器里把注册表改乱了也不影响到host和其他容器,进一步Windwos里用Job Object来限制容器的资源使用,而Linux使用Cgroup来限制容器的资源使用,限于篇幅不再这里详述了。

 

实际上容器目前功能还在继续丰富迭代,进一步演化出了这种各样的体系和应用,比如强大的API, 存储,容器集群,基于容器的高性能计算和基于容器的分布式计算等,后续会逐步展开。

 

本文电子书下载:

云盘下载:http://pan.baidu.com/s/1jHfP9Dc

网页下载:http://www.youruncloud.com/help/115.html

博客期刊:http://www.youruncloud.com/blog/0_3.html

 

 

 

分享:容器系列一:容器起源

有容云-构筑企业容器云 www.youruncloud.com

调查问卷

1、您所在的公司在IT方面面临哪些挑战? (最少选1项)

技术架构老旧过时,业务需要IT从传统架构转向互联网架构
需要管理使用多个云,避免vendor locked-in
IT资产(例如虚拟机或者物理服务器)的资源利用低,成本高昂难以承受
业务有强烈弹性需求 (比如,短期内用户访问量剧增)
使用微服务架构
开发、测试、生产环境不统一,企业内缺乏统一交付标准
运维工作复杂、自动化程度低,产品交付周期长
缺乏服务于内部其他业务部门或者第三方应用,且具备完善的计费及权限模块的PaaS平台
其他

2、您所在的公司在使用哪些私有、公有云解决方案?(最少选1项)

OpenStack
CloudStack
VMware
AWS
Azure
阿里云
金山云
腾讯云
UCloud
青云
其他

3、您是如何看待开源软件的?您所在的公司是否有使用开源软件?


没有,但有意向
没有,不接受

4、请问您所在的公司所属行业是?

传统金融、新金融
运营商
互联网
其他

5、您所在的公司在使用哪些容器管理方案?(最少选1项)

Kubernetes
Mesos
Docker Swarm
Rancher
没有

6、您所在的公司在使用容器管理方案时,认为其最需要改善的功能项是?(最少选1项)

网络管理方案
存储管理方案
易用性
完整性
没有
           

文章归档