什么是容器
容器是指容纳其他物品的工具,物体可以被放置在容器内,容器可以保护其中内容物;
Linux容器发展之路
容器技术的概念最初出现在 2000 年,当时称为 FreeBSD jail,这种技术可将 FreeBSD 系统分区为多个子系统(也称为 Jail)。Jail 是作为安全环境而开发的,系统管理员可与企业内部或外部的多个用户共享这些 Jail
通过Jail技术在Linux中的实现这个项目被叫做VServer,在完成了这项针对 Linux 中多个受控制用户空间的基础性工作后,Linux 容器开始逐渐成形并最终发展成了现在的模样
很快,更多技术结合进来,让这种隔离方法从构想变为现实。控制组(cgroups)是一项内核功能,能够控制和限制一个进程或多组进程的资源使用。而 systemd 初始化系统可设置用户空间,并且管理它们的进程,cgroups 使用该系统来更严密地控制这些隔离进程。这两种技术在增加对 Linux 的整体控制的同时,也成为了保持环境隔离的重要框架。
传统虚拟化技术与容器技术的对比
虚拟机【全虚拟化技术】
- Server层:所有的硬件设备
- Host OS层:宿主机
- Hypervisor层:管理程序【VMware】
虚拟机:是通过Hyervisor管理程序先模拟宿主机硬件设备,在模拟宿主机的软件操作系统,CPU,IO;是一种全量模拟,从而实现了互相的隔离
- 优点:完美的隔离了,两个不同的应用场景,各自的功能、资源都是隔离
- 缺点:非常耗费资源,当虚拟设备要执行某项Core中特权质量,需要通过Hypervisor,的转发到宿主机去执行,性能会有耗损(有中间商赚差价)
容器
- Servier层:所有的硬件设备
- Host OS层:宿主机
- Docker Engine层:Docker 引擎
容器技术:共享宿主机硬件与网络资源;在Docker容器中运行自己所需的程序,并相互隔离
Docker隔离,隔离什么?
两个独立的Docker,需要chroot以及namespace的隔离【根文件系统和,进程系统】
Linux在内核中通过namespaces,原生支持6中资源的隔离,并且直接通过系统调用对外进行输出。另外我们还需要用到CCgroups控制美国namespaces中的资源分配,如需要实现:资源限制管理、优先级设定、资源计量、资源控制,以下具体分工
从LXC (Linux containers) 到Docker
LXC将原来需要手工编码实现的容器技术,进行了封装。实现了更加方便、快速的容器创建及管理技术。通过固有的“模板”,安装并启动容器,将远程的程序包下载到本地,安装并创建好了容器。
LXC已经很大程度上降低了容器管理的难度,但是依然使用了一些弊端。有些时候更具需要需要定制"模板",以及大规模创建及复制依然比较麻烦。所以很难应用到
Docker这时候就出现了,Docker其实就是在LXC基础上,使用GoLang二次开发的封装版本
总结
早期的FreeBASE--------》Linux vserver实现了以下三种
- chroot :根文件系统的切换
- namespace:命名空间的隔离【UTS Mount IPC PID user network】
- ccgroups:资源空间的分配和监控
通过比较复杂的代码开发的过程,调用以上三项技术实现容器的创建 ----> 管理 ---->销毁