从虚拟化到云原生——容器技术的发展史\"

发布时间:2025-04-17 点击:4
近年来,云原生 (cloud native)可谓是 it 界最火的概念之一,众多互联网巨头都已经开始积极拥抱云原生。而说到云原生,我们就不得不了解本文的主角 —— 容器(container)。容器技术可谓是撑起了云原生生态的半壁江山。容器作为一种先进的虚拟化技术,已然成为了云原生时代软件开发和运维的标准基础设施,在了解它之前,我们不妨从虚拟化技术说起。
何谓虚拟化技术
1961 年—— ibm709 机实现了分时系统
计算机历史上首个虚拟化技术实现于 1961 年,ibm709 计算机首次将 cpu 占用切分为多个极短 (1/100sec) 时间片,每一个时间片都用来执行着不同的任务。通过对这些时间片的轮询,这样就可以将一个 cpu 虚拟化或者伪装成为多个 cpu,并且让每一颗虚拟 cpu 看起来都是在同时运行的。这就是虚拟机的雏形。
容器的功能其实和虚拟机类似,无论容器还是虚拟机,其实都是在计算机不同的层面进行虚拟化,即使用逻辑来表示资源,从而摆脱物理限制的约束,提高物理资源的利用率。虚拟化技术是一个抽象又内涵丰富的概念,在不同的领域或层面有着不同的含义。
这里我们首先来粗略地讲讲计算机的层级结构。计算机系统对于大部分软件开发者来说可以分为以下层级结构:
应用程序层函数库层操作系统层硬件层
各层级自底向上,每一层都向上提供了接口,同时每一层也只需要知道下一层的接口即可调用底层功能来实现上层操作(不需要知道底层的具体运作机制)。
但由于早期计算机厂商生产出来的硬件遵循各自的标准和规范,使得操作系统在不同计算机硬件之间的兼容性很差;同理,不同的软件在不同的操作系统下的兼容性也很差。于是,就有开发者人为地在层与层之间创造了抽象层:
应用层函数库层 api抽象层操作系统层 硬件抽象层硬件层
就我们探讨的层面来说,所谓虚拟化就是在上下两层之间,人为地创造出一个新的抽象层,使得上层软件可以直接运行在新的虚拟环境上。简单来说,虚拟化就是通过模访下层原有的功能模块创造接口,来“欺骗”上层,从而达到跨平台开发的目的。
综合上述理念,我们就可以重新认识如今几大广为人知的虚拟化技术:
虚拟机:存在于硬件层和操作系统层间的虚拟化技术。
虚拟机通过“伪造”一个硬件抽象接口,将一个操作系统以及操作系统层以上的层嫁接到硬件上,实现和真实物理机几乎一样的功能。比如我们在一台 windows 系统的电脑上使用 android 虚拟机,就能够用这台电脑打开 android 系统上的应用。
容器:存在于操作系统层和函数库层之间的虚拟化技术。
容器通过“伪造”操作系统的接口,将函数库层以上的功能置于操作系统上。以 docker 为例,其就是一个基于 linux 操作系统的 namespace 和 cgroup 功能实现的隔离容器,可以模拟操作系统的功能。简单来说,如果虚拟机是把整个操作系统封装隔离,从而实现跨平台应用的话,那么容器则是把一个个应用单独封装隔离,从而实现跨平台应用。所以容器体积比虚拟机小很多,理论上占用资源更少。
jvm:存在于函数库层和应用程序之间的虚拟化技术。
java 虚拟机同样具有跨平台特性,所谓跨平台特性实际上也就是虚拟化的功劳。我们知道 java 语言是调用操作系统函数库的,jvm 就是在应用层与函数库层之间建立一个抽象层,对下通过不同的版本适应不同的操作系统函数库,对上提供统一的运行环境交给程序和开发者,使开发者能够调用不同操作系统的函数库。
在大致理解了虚拟化技术之后,接下来我们就可以来了解容器的诞生历史。虽然容器概念是在 docker 出现以后才开始在全球范围内火起来的,但在 docker 之前,就已经有无数先驱在探索这一极具前瞻性的虚拟化技术。
容器的前身 “jail”
1979 年—— 贝尔实验室发明 chroot
容器主要的特性之一就是进程隔离。早在 1979 年,贝尔实验室在 unix v7 的开发过程中,发现当一个系统软件编译和安装完成后,整个测试环境的变量就会发生改变,如果要进行下一次构建、安装和测试,就必须重新搭建和配置测试环境。要知道在那个年代,一块 64k 的内存条就要卖 419 美元,“快速销毁和重建基础设施”的成本实在是太高了。
开发者们开始思考,能否在现有的操作系统环境下,隔离出一个用来重构和测试软件的独立环境?于是,一个叫做 chroot(change root)的系统调用功能就此诞生。
chroot 可以重定向进程及其子进程的 root 目录到文件系统上的新位置,也就是说使用它可以分离每个进程的文件访问权限,使得该进程无法接触到外面的文件,因此这个被隔离出来的新环境也得到了一个非常形象的命名,叫做 chroot jail (监狱)。之后只要把需要的系统文件一并拷贝到 chroot jail 中,就能够实现软件重构和测试。这项进步开启了进程隔离的大门,为 unix 提供了一种简单的系统隔离功能,尤其是 jail 的思路为容器技术的发展奠定了基础。但是此时 chroot 的隔离功能仅限于文件系统,进程和网络空间并没有得到相应的处理。
进入21世纪,此时的虚拟机(vm)技术已经相对成熟,人们可以通过虚拟机技术实现跨操作系统的开发。但由于 vm 需要对整个操作系统进行封装隔离,占用资源很大,在生产环境中显得太过于笨重。于是人们开始追求一种更加轻便的虚拟化技术,众多基于 chroot 扩展实现的进程隔离技术陆续诞生。
2000 年——freebsd推出 freebsd jail
在 chroot 诞生 21 年后,freebsd 4.0 版本推出了一套微型主机环境共享系统 freebsd jail,将 chroot 已有的机制进行了扩展。在 freebsd jail 中,程序除了有自己的文件系统以外,还有独立的进程和网络空间,jail 中的进程既不能访问也不能看到 jail 之外的文件、进程和网络资源。
2001 年——linux vserver诞生
2001年,linux 内核新增 linux vserver(虚拟服务器),为 linux 系统提供虚拟化功能。linux vserver 采取的也是一种 jail 机制,它能够划分计算机系统上的文件系统、网络地址和内存,并允许一次运行多个虚拟单元。
2004 年—— sun 发布 solaris containers
该技术同样由 chroot 进一步发展而来。2004 年 2 月,sun 发布类 unix 系统 solaris 的 10 beta 版,新增操作系统虚拟化功能 container,并在之后的 solaris 10 正式版中完善。solaris containers 支持 x86 和 sparc 系统,sun 创造了一个 zone 功能与 container 配合使用,前者是一个单一操作系统中完全隔离的虚拟服务器,由系统资源控制和 zones 提供的边界分离实现进程隔离。
2005 年——openvz诞生
类似于 solaris containers,它通过对 linux 内核进行补丁来提供虚拟化、隔离、资源管理和状态检查 checkpointing。每个 openvz 容器都有一套隔离的文件系统、用户及用户组、进程树、网络、设备和 ipc 对象。
这个时期的进程隔离技术大多以 jail 模式为核心,基本实现了进程相关资源的隔离操作,但由于此时的生产开发仍未有相应的使用场景,这一技术始终被局限在了小众而有限的世界里。
就在此时,一种名为“云”的新技术正悄然萌发……
“云”的诞生
2003 年至 2006 年间,google 公司陆续发布了 3 篇产品设计论文,从计算方式到存储方式,开创性地提出了分布式计算架构,奠定了大数据计算技术的基础。在此基础上,google 颠覆性地提出“google 101”计划,并正式创造“云”的概念。一时间,“云计算”、“云存储”等全新词汇轰动全球。随后,亚马逊、ibm 等行业巨头也陆续宣布各自的“云”计划,宣告“云”技术时代的来临。
也是从这时期开始,进程隔离技术进入了一个更高级的阶段。在 google 提出的云计算框架下,被隔离的进程不仅仅是一个与外界隔绝但本身却巍然不动的 jail,它们更需要像一个个轻便的容器,除了能够与外界隔离之外,还要能够被控制与调配,从而实现分布式应用场景下的跨平台、高可用、可扩展等特性。
2006 年—— google 推出 process containers,后更名为cgroups
process container 是 google 工程师眼中“容器”技术的雏形,用来对一组进程进行限制、记账、隔离资源(cpu、内存、磁盘 i/o、网络

人工服务问题-其他问题
学生租腾讯云服务器
麻烦你们测试下这个的的证书有部署成功吗
有什么备案的云服务器
网站优化中怎么提高转化率吧
Linux(Centos7)下redis5集群搭建和使用说明详解
网站打不天-其他问题
腾讯云阿里云服务器怎么用