思考:容器是如何发展的,主要用在哪些场景?
了解基本的概念之后,一个疑问自然浮现心头:虚拟化和容器技术本质上有什么差异呢?小陈不太明白,于是继续求助大刘。
小陈:师傅,容器技术看上去也是一种虚拟化技术,对吗?
大刘:应该这么说,容器技术是一种全新意义上的虚拟化技术,更像是一种轻量级的虚拟化。你先了解下容器技术的发展过程,就会明白是怎么回事了。
小陈:好的。我先恶补一下容器的基础知识。
容器技术起源于 1979 年 chroot,经过长时间的发展,现已逐步成熟,并在代表性的Docker诞生后迎来了它的繁荣时代。下面是容器技术发展的一些关键时间节点:
1979年,Unix v7系统支持chroot,为应用构建一个独立的虚拟文件系统视图。
2000年,FreeBSD 4.0支持jail,第一个商用化的OS虚拟化技术。
2001年,Linux VServer诞生, 另一种 jail 机制,用于安全地区分计算机系统上资源。
2005年,OpenVZ发布,非常重要的Linux OS虚拟化技术先行者。
2006年,Google开源内部使用的process container技术,后续更名为cgroup。
2007年,cgroups 进入了 Linux 内核主线。
2008年,LXC(Linux Container)项目具备了Linux容器的雏型。
2011年,CloudFoundry开发Warden系统,一个完整的容器管理系统雏型。
2013年,Docker项目正式发布,并逐步被广泛接受,让Linux容器技术席卷天下。
2014年,Kubernetes项目正式发布,容器技术和编排系统的发展齐头并进。
2015年,由Google、Redhat、Microsoft及一些大型云厂商共同创立了 CNCF 云原生基金会,云原生浪潮启动。
2016年,推出Winodws容器,Docker 能够以原生方式在 Windows 平台上运行。
2016-2017年,容器生态开始模块化、规范化。CNCF 接受 Containerd、rkt项目,OCI 发布1.0,CRI/CNI 得到广泛支持。
2017-2019年,容器引擎技术飞速发展,新技术不断涌现。Kata Containers 社区成立,Google 开源 gVisor 代码,AWS 开源 firecracker,阿里云发布安全沙箱 1.0。
2020年之后,容器引擎技术不断升级,逐渐成为云原生基础设施……
容器借鉴了集装箱的概念,集装箱解决了什么问题呢?无论形状各异的货物,都可以装入集装箱,集装箱与集装箱之间不会互相影响。由于集装箱是标准化的,就可以把集装箱整齐摆放起来,装在一艘大船把他们都运走。有了集装箱,就再也不需要为各种货物单独准备专门运输的船了。如果把容器比作集装箱的话,应用就相当于集装箱里的货物。
容器类似“集装箱”,应用好比“货物”
容器概念与特点
容器(Container):一种轻量级的虚拟化技术,这种技术允许操作系统上的用户空间被分割成几个独立的单元在内核中运行,彼此互不干扰。这样一个独立的空间,就称之为一个“容器”。
容器为应用软件及其依赖组件提供了一个资源独立的运行环境。应用软件所依赖的组件会被打包成一个可重用的镜像,镜像运行环境并不会与主机操作系统共享内存、CPU和硬盘空间,由此也保证了容器内部的进程与容器外部进程的独立关系。
举个例子,一个操作系统,可以类比成一套公寓,那么容器就相当于公寓中的一个房间,大家共享同一个客厅,厨房和卫生间。但是房间和房间之间彼此隔离,一个房间里面的人的活动,不会影响到其他房间的住客。房间也有门,因此有一定的安全隔离保障。
容器的技术特点:
- 容器是自包含的。它打包了应用程序及其所有依赖,可以直接运行。
- 容器是可移植的。可以在几乎任何地方以相同的方式运行。这就可以确保应用在开发环境、测试环境、生产环境等都有完全一样的运行环境。
- 容器是轻量级的。占用资源很少,可以秒级启动。
- 容器是互相隔离的。同一主机上运行的多个容器,不会互相影响。
容器技术和虚拟化的比较
通过对容器技术的学习,小陈回头来看,发现容器和虚拟机有联系,也有差异。于是做了下容器和虚拟机的详细比较。
在虚拟化架构中,底层是硬件,往上是虚拟化层hypervisor,之上安装虚拟机操作系统,接着配置应用运行所需的依赖环境,然后安装APP。而在容器架构中,底层也是硬件,往上是操作系统而不是虚拟化层hypervisor,再安装容器引擎,就可以在容器中配置应用运行依赖并安装APP。
这两种架构,一个很直观的对比结果是,容器的运行不需要再额外安装虚拟机操作系统。可见,容器是一种比虚拟机更轻量级的虚拟化技术,支持秒级启动具备更好的快速扩展能力,具备更好的跨平台迁移能力。当然也由于这个原因,容器的隔离性上不如虚拟机。两者主要差异如下:
- 虚拟机OS占用了较多资源,一个虚拟机基本是GB 级的,一个容器可小至几MB。
- 虚拟机的启动时间一般是分钟级的,而容器的启动时长是毫秒级的。
- 由于容器的轻量级,它具备了更好的快速扩展能力。
- 容器比虚拟机具备更好的跨平台迁移能力,如虚拟机无法从Vmware迁移至KVM。
练习实验:通过ACR快速部署网站应用
https://developer.aliyun.com/adc/scenario/exp/79f68855f1194655bb08e125b59ec104?