你真的了解容器嘛-上篇

Posted by 小罗 on January 21, 2019

前言

前段时间写了一篇文章云原生技术的“前世今生”,讲述了云原生技术背后的一些故事,其中提到了一家做容器技术很牛的公司叫Docker。我估计很多小伙伴是听到Docker这个词才去了解容器的概念和技术,而不是因为容器技术才去了解Docker!是不是被我说中了?甚至有些小伙伴可能会说,容器不就是Docker嘛?

今天我想借助这篇文章带着大家一起捋一捋容器技术和Docker之间的关系,带你了解到底什么是容器技术,什么是docker!!

故事正式开始!!!

容器技术编年史

1979年在UNIX的第7个版本中引入了一个内核系统调用叫“chroot”,中文可以翻译成“切根”,也就是切换根目录,是让一个应用程序进程的根目录改变到文件系统的新位置而不是使用系统的原始“/”根目录,目的是让这个进程只能在自己特定的目录空间下搞事情,不能扰乱同一个系统屋檐下其他应用程序的目录,至此“容器”的概念开始萌芽!这项技术在1982年3月18日被加入到BSD系统中。

2000年3月14日借助之前引入的chroot系统调用技术以及加入了一些新功能,FreeBSD4.0版本中首次发布了FreeBSD jail功能,与之前的chroot 不同的是,FreeBSD jail可以实现文件系统、用户、网络等的隔离,使得每一个应用进程都有自己独立的资源可以使用,仿佛被放在了一个盒子里,通常我们叫“沙盒”,他可以为每一个jail指定 IP 地址、可以对软件的安装和配置进行定制,等等。最早的容器技术诞生了!!(补充一句,jail就是监牢的意思,把进程放到固定“沙盒/监牢”里!)

图片来自google图片

2001年由 Jacques Gélinas发起,开源软件联盟维护的另一个基于 jail机制的容器技术“Linux Vserver”发布,它用于对计算机系统上的资源(如文件系统、CPU 处理时间、网络地址和内存等)进行安全地划分,划分出的虚拟系统叫Virtual Private Server(VPS)。 图片来自google图片

2004年2月 SUN发布了基于X86架构和SPAC架构下Solaris 10操作系统内的“Solaris Containers”功能,Container这个词初出江湖。 图片来自google

2005年由Open Virtuozzo社区发布了基于liunx kernel的容器功能组件 OpenVZ,和Solaris Containers功能相似!每个 OpenVZ 容器都有一套隔离的文件系统、用户及用户组、进程树、网络、设备和 IPC 对象。 图片来自google

2006年Google开始使用Process Containers,用于对一组进程进行限制、记录、隔离资源使用(CPU、内存、磁盘 I/O、网络等)。后来为了避免和 inux kernel context,的“容器”一词混淆而改名为 Control Groups,并在2007年被liunx合并到2.6.24的kernel中.上一篇文章中云原生技术的“前世今生”我曾经提到,google秘而不宣的使用容器技术已经十几年啦!! 图片来自google

2008年8月6日,Sourceforge开源网站正式发布了LXC,全称 Linux Containers,耿直的就叫linux容器,它是第一个最完善的 Linux 容器管理器的实现方案,通过linux的内核技术cgroups和namespace技术实现,与其它容器技术不同的是, LXC 可以工作在普通的 Linux 内核上,而不需要增加补丁,这在当时是一个明星项目! 图片来自google

2011年CloudFoundry发布Warden,底层使用的LXC,只是底层不再耦合到linux上,还记得我上篇文章所说的嘛,当Docker项目刚刚开源的时候,当时的PAAS的老大CloudFoundry并不感到有什么新奇,因为CloudFoundry的底层也是容器技术! 图片来自google

2013年3月13日dotCloud公司宣布开源自己的容器项目Docker,在Docker 0.9版本以前docker的核心是LXC。对,你没看错就是LXC,在Dcoker 0.9版本以后推出了自己的容器运行驱动libcontainer,同时也支持LXC,在1.10版本后才正式放弃了对LXC的支持,后来为了遵循OCI,libcontainer又升级为runC. 图片来自google

总结

So,来点总结 ,容器技术早就有了,而且早先的明星容器实现工具是LXC(别人的名字就叫 Linux Containers), Docker一开始是基于LXC的,所以严格的来说Docker并不是什么容器 ,他只是LXC的增强版,是容器技术易用的前端工具,容器本身是Liunx的内核技术,Docker只是把这项技术进行了极大的简化和普及!

那么为何docker一开始要去封装LXC呢?到底LXC的底层用了什么技术让Docker如此看重?这么多容器技术为什么偏偏Docker就火遍了大江南北?Docker的独到之处到底在哪?下篇文章见!!