互联网 频道

容器起源 云舒网络精选期刊2

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

  注:本期分享嘉宾代豪,云舒网络整理发布。

  说到容器,这个概念现在非常火;实际上,在IT领域内各种技术一直是逐步迭代演进的,而每一次技术革新,正是从发现问题开始。

  问题一:windows系统方面

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

  第一:两个程序可以访问相同的资源,比如C盘上的数据;在编辑文档时,setup进程占用cpu过高,从而影响了编辑文档的体验。

  第二:Window里有个叫注册表的东西,这个被搞乱会带来很多麻烦。而setup如果设计兼容性不好,就有可能把注册表搞乱.

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

  问题二:linux系统方面

  我们再来看一下linux系统:

  首先:我们知道linux系统有很多发行版本,比如centos、ubuntu等。我们的应用有app1 for centos,也有app2 for ubuntu的,那现在我需要在一个OS里能跑app1和app2,怎么办?

  其次:对于app1和app2的开发者需要编译出不同发行版的应用程序:for centos、for ubuntu等,如何实现?

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

  如何解决上述问题?

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

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

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

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

  精简OS层

  精简OS这一层,各个app执行环境共享OS是一个有效的方法。我们先看看linux为什么能做到这一点。

  实际上现在的linux可以理解为两部分,一是内核,一是发行环境。比如我们说的centos,ubuntu,redhat等,就是指的发行环境。大家都在相同的linux内核的外围发行自己的管理执行程序,各个发行版本就是目前的centos,ubuntu等,这时候解决方法就来了:提供多个发行环境共享一个linux内核的功能。

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

  linux容器核心功能

  我们来来看看linux容器的基本核心功能:

  1.文件系统隔离

  每个容器运行在完全独立的根文件系统里。

  2.网络隔离

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

  3.资源隔离

  为每个进程容器分配不同系统资源,如cpu,mem,io等。

  windows容器价值

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

  结语

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

1
相关文章