一、容器技术介绍
核心定义:容器是一种操作系统层面的虚拟化技术,通过对,让他在下,获得独立的运行视图与资源边界。与传统虚拟机对比特性虚拟机 (VM)容器 (Container)虚拟化层级硬件级虚拟化 (Hypervisor)操作系统级虚拟化资源占用GB级内存、完整系统镜像MB级内存、共享内核启动速度分钟级秒级(0.1~1秒)性能损耗15%-30%<5%隔离性硬件级强隔离进程级隔离。
一、容器介绍
1.1 容器本质
核心定义:容器是一种操作系统层面的虚拟化技术,通过对进程加隔离机制(namespace)和资源限制(CGroup),让他在共享主机内核(共享宿主机bootfs)的环境
下,获得独立的运行视图与资源边界。
与传统虚拟机对比
特性 | 虚拟机 (VM) | 容器 (Container) |
---|---|---|
虚拟化层级 | 硬件级虚拟化 (Hypervisor) | 操作系统级虚拟化 |
资源占用 | GB级内存、完整系统镜像 | MB级内存、共享内核 |
启动速度 | 分钟级 | 秒级 (0.1~1秒) |
性能损耗 | 15%-30% | <5% |
隔离性 | 硬件级强隔离 | 进程级隔离 |
二、容器三大核心
容器说白了就是追求一个轻量级的虚拟化方案,来达到隔离的目的(同时提高硬件利用率),这个空间隔离就是容器技术的第一个核心技术:namespace名称空间。
但是光有隔离还不够,因为空间隔离之后,多个容器寄生在同一台机器上,虽然是隔离的,但是归根结底都是在公用或者说共同消耗宿主机的硬件资源,比如内存,如果不加以限制,当内存不足时会触发linux的oom机制,杀掉一些进程。所以为了解决这个问题,于是容器技术在隔离的基础上引入了cgroup机制,来对资源进行限制(包括磁盘、内存、cpu等资源)。
一个容器的启动需要有一个镜像,容器的镜像与操作系统的镜像还是有很大区别,系统镜像的主要构成是bootfs
包含内核+rootfs
,而容器镜像里没有bootfs
内存相关、只有一个rootfs
,而且容器的rootfs文件系统并非传统的ext4、xfs等,而是采用一种联合文件系统技术,称为UnionFS
,该技术会在启动时把容器进行挂载到(而不是复制)容器里面使用的。UnionFS是一个技术概念而不是一个具体的技术,多个目录联合挂载到同一个目录下。
所以,容器技术有三大核心:
- 1、namespace名称空间:保证多个容器之间的运行环境(使用时资源)互相隔离,彼此互不影响,可以使每个进程看起来都拥有自己的隔离的全局系统资源,即每个进程都有自己的命名空间,每个进程中运行的应用程序都像是运行在一个独立的系统一样
- 2、CGroup机制:限制资源使用
- 容器的本质就是进程,多个进程不受限制的占用系统资源,如cpu、内存、磁盘、网络等。
- 当某个进程占用过多资源,以至于将主机系统资源耗尽时,linux内核会触发OOM机制,OOM会在系统内存耗尽的情况下跳出来,选择性的干掉一些进程以求释放一些内存,这会让一些被杀掉的内存成了无辜的替死鬼。
- 所以让容器的进程更加可控,Docker使用Linux cgroups来限制容器中的进程允许使用的系统资源 Linux Cgroup可以让系统中所运行任务(进程)的用户定义组分配资源,比如CPU时间、系统内存、网络带宽
- 3、UnionFS联合文件系统:镜像、分层挂载
- UnionFS顾名思义,可以把主机文件系统上多个目录(分支)内容联合挂载到同一个目录下,而主机上文件系统的多个目录的物理位置是分开的,这可以让多个容器进程共享同一份镜像,而不是向传统虚拟化那样每台vm都有一个完整的操作系统,把轻量级追求到极致。
更多推荐
所有评论(0)