一、容器介绍

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都有一个完整的操作系统,把轻量级追求到极致。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐