0 容器的趋势所向
IT企业的软件开发模型由传统的客户端/服务端模型,变成浏览器/服务器模型;由物理机变成虚拟机,再变成IaaS(基础架构云)和PaaS(应用云)。通过近些年的云化,很多企业实现了基础架构资源(虚拟机、网络、存储和数据库等资源)的云化和池化,用户可以通过云化讯处的获取业务应用所需的机器、数据库以及数据存储。当上层业务和下层基础架构资源完备后,中间的一个连接就应运而生——容器化,通过容器方案实现应用在基础架构资源上的“一键式”部署,快速(原来的应用需要几天甚至十几天才能全部部署完毕,现在只需要一天甚至几个小时就可以部署完毕)、便捷(原来的应用需要jar、war、rpm等方式部署,现在只需要镜像和容器化平台)且成本低(应用成本、资源成本,还有重要的人力成本在降低)。
1 虚拟机和容器化比较


2 容器实现隔离机制
两种方式: Linux命名空间;Linux控制组(cgroups)
2.1 用Linux命名空间隔离进程
Linux命名空间使每个进程只看到自己的系统视图(文件、进程、网络接口、主机名等) 默认,每个Linux系统起始有一个命名空间,所有系统资源(如文件系统、用户ID、网络接口等)属于这个命名空间,但可以创建额外的命名空间,以及在它们之间组织资源,一个进程可以运行在其中一个命名空间中,该进程只能看到该命名空间下的资源。 命名空间用于隔离一组特定的资源,命名空间类型如下:
- Mount(mnt)
- Process ID(pid)
- Network(net)
- Inter-process communication(ipd)
- UTS
- User ID(user)
2.2 Linux控制组
通过cgroups限制容器能使用的系统资源,cgroups升级一个Linux内容功能,可以限制一个进程或者一组进程的资源使用,一个进程的资源(CPU、内存、网络带宽等)使用量是不可以超过被分配的量。