本来想直接写docker知识点的,但是感觉只有了解containers的发展历程,才能知道技术知识点的来龙去脉,建立起一个线性的链条,把知识点串联起来。
1979: Unix V7
在1979年开发Unix V7期间,引入了chroot系统调用功能。这个功能将进程及其子进程的根目录更改为文件系统中的一个新位置。这一进步是进程隔离的开始:隔离每个进程的文件访问。Chroot于1982年加入BSD
2000: FreeBSD Jails
2000年,一家小型共享环境主机提供商提出了FreeBSD jail,以实现其服务和客户服务之间的清晰分离,以确保安全性和易于管理。FreeBSD Jails允许管理员将一个FreeBSD计算机系统分割成几个独立的、更小的系统——称为“jails”。jails能够为每个系统和配置分配一个IP地址。
2001: Linux VServer
与FreeBSD Jails一样,Linux VServer是一种jail机制。它可以对计算机系统上的资源(文件系统、网络地址、内存)进行分割。这种操作系统虚拟化,通过给Linux内核打补丁来实现。
2004: Solaris Containers
2004年,Solaris Containers的第一个公测版本发布。它结合了系统资源控制和由zone提供的边界分离,能够利用快照和从ZFS克隆等特性。
2005: Open VZ (Open Virtuzzo)
这是一种Linux操作系统级的虚拟化技术,它使用一个打过补丁的Linux内核进行虚拟化、隔离、资源管理和checkpointing。这功能并没有作为官方Linux内核的一部分发布。
2006: Process Containers
2016年,Google推出了Process Containers。该功能设计为对一组进程的资源(CPU, memory, disk I/O, network)进行限制、统计、隔离。一年后,它被重新命名为“Control Groups (cgroups)”,并最终合并到Linux内核2.6.24中。
2008: LXC
LXC (LinuX Containers)是LinuX容器管理器的第一个、最完整的实现。它是在2008年使用cgroups和Linux namespaces实现的,它可以在单个Linux内核上工作,不需要任何补丁。
2011: Warden
2011年,CloudFoundry启动了Warden,其在早期阶段使用LXC,后来用自己的实现替换它。Warden可以在任何的操作系统上隔离环境,其以后台进程的方式运行,为管理容器提供了api。它开发了一个客户机-服务器模型来管理跨多个主机的容器集合。Warden有一个用于管理cgroup、namespaces和进程生命周期的服务。
2013: LMCTFY
2013年,Let Me Contain That For You (LMCTFY),作为谷歌容器栈的一个开源版本推出,其提供linux应用容器。应用程序可以“感知容器”,创建和管理它们自己的子容器。在2015年谷歌开始将LMCTFY的核心概念贡献给libcontainer之后,LMCTFY就停止了。
2013: Docker
像Warden做的那样,Docker在最初阶段也使用了LXC,后来用自己的库libcontainer取代了那个容器管理器。但毫无疑问,Docker通过为容器管理提供一个完整的生态系统,将自己从包中分离出来。
2017: Container Tools Become Mature
为了使容器管理更容易,开发了数百种工具。k8s是其最突出的一个。Kubernetes,自2016年被云本地计算基金会(CNCF)采用以来,VMWare、Azure、AWS甚至Docker都宣布了对其基础设施的支持。自2016年被云本地计算基金会(CNCF)采用以来,VMWare、Azure、AWS甚至Docker都宣布了对其基础设施的支持。