容器系列一:容器起源

 

摘要:

 

为了运行不同环境的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

温馨提示

对Docker容器技术或容器生产实施感兴趣的朋友欢迎加群讨论。我们汇集了Docker容器技术落地实施团队精英及业内技术派高人,在线为您分享Docker技术干货。我们的宗旨是为了大家拥有更专业的平台交流Docker实战技术,我们将定期邀请嘉宾做各类话题分享及回顾,共同实践研究Docker容器生态圈。

加微信群方法:

1.关注【有容云】公众号

2.留言”我要加群”

QQ群号:454565480

有容云微信二维码

文章归档

查看更多