0 容器的趋势所向
IT企业的软件开发模型由传统的客户端/服务端模型,变成浏览器/服务器模型;由物理机变成虚拟机,再变成IaaS(基础架构云)和PaaS(应用云)。通过近些年的云化,很多企业实现了基础架构资源(虚拟机、网络、存储和数据库等资源)的云化和池化,用户可以通过云化讯处的获取业务应用所需的机器、数据库以及数据存储。当上层业务和下层基础架构资源完备后,中间的一个连接就应运而生——容器化,通过容器方案实现应用在基础架构资源上的“一键式”部署,快速(原来的应用需要几天甚至十几天才能全部部署完毕,现在只需要一天甚至几个小时就可以部署完毕)、便捷(原来的应用需要jar、war、rpm等方式部署,现在只需要镜像和容器化平台)且成本低(应用成本、资源成本,还有重要的人力成本在降低)。
1 虚拟机和容器化比较
1)容器更加轻量级,允许在相同的硬件上运行更多数量的组件。每个虚拟机需要运行自己的一组系统进程,进程是运行在不同的操作系统上的。而一个容器仅仅是运行在宿主机上被隔离的单个进程,仅消耗应用容器消耗的资源,不会有其他进程的开销。容器低消耗。
2)虚拟机提供完全隔离的环境,每个虚拟机运行在它自己的Linux内核上,容器是调用同一个内核。
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、内存、网络带宽等)使用量是不可以超过被分配的量。