2016年2月6日,Docker 1.10上线,其中一个变化是Docker1.10取消了对LXC的支持。看似不起眼的变化,实为布局已久的较量,这背后有什么原因呢?
我们说过,容器概念早在Linux内核里就有,并非Docker独家专利。Docker在2013年初出茅庐时,作为商业化的容器产品,本身也是基于linux内核的特性。但不难发现,Docker一路走来,在发展战略上一直野心勃勃,要建立自己的生态系统,LXC出局就是一个最好的例子。
2013,Docker问世,彼时,LXC是它的底层基石。在Docker 0.9的时候,Docker见异思迁了,引入了基于Go构建的libcontainer的execution driver. 有了libcontainer这个项目, Docker不再需要依赖于Linux部件 ( LXC, libvirt, systemd-nspawn... ) 就可以处理namespaces, control groups, capabilities, apparmor profiles, network interfaces. 这下,LXC沦为可选项(下图所示),开始stand by了。
Docker的CTO, Solomon Hykes, 在2014年DockerCon正式宣布Libcontainer项目,得到了来自各大IT公司包括Google, parallels (openvz), redhat, ubuntu的支持和贡献,这下大大提升了产品稳定性和兼容性,也预示了LXC后来的命运。
在Docker 1.8中LXC被deprecated,现在Docker 1.10,LXC彻底出局。Docker推出libcontainer自己集成了linux内核中的很多特性,作为一个独特、稳定且不受制于Linux的library,独立的时代终于到来了。
不难看出,在Docker、容器流行之后,Docker自己在思考一个更为重要的问题 —— 如何让Docker朝着容器封装、运行的标准化更进一步?如何在兼容、共荣的同时还能掌握更多的话语权?这些问题在容器生态圈这个群狼共舞的竞技场里意义深远。那么,这个竞技场里的其他玩家呢?他们又在做什么呢?我们下回再分解。