知识卡片

LXC败给Docker的根源是封装系统与封装应用两种理念的效果差异

普通读书笔记卡

内容

[[chroot到namespace到cgroups的三级隔离递进]]凑齐前置条件后,2008年 LXC率先降低了普通用户综合使用namespaces、cgroups的门槛,一度是容器 概念走向工业界的起点。但今天10个开发者里可能9个知道Docker、只有1个 听过LXC,根源不在技术,而在理念:LXC眼中的容器是”封装系统的轻量级 虚拟机”(和它的前辈OpenVZ、Linux-VServer一样),Docker眼中的容器是 “封装应用的技术手段”。这个差异用一个具体场景就能看清:按LXC思路搭建 LAMP(Linux+Apache+MySQL+PHP)应用,要先编写或找到LAMP的template (类似LXC版Dockerfile),构造出装好LAMP的虚拟系统——这对当年”手动装 一台虚拟机要一两天”的系统管理员来说已经很方便了。但如果要把LAMP换成 LNMP(Nginx替换Apache),或者只是把MySQL 5升级到MySQL 8,就只能重新 找或重新写一份template——因为LXC的思路本质上还是”先装系统、再装软件”, 永远做不到十几秒钟就构造出合乎要求的运行环境,这也决定了LXC不可能像 Docker那样形成繁荣的应用生态。这个对比揭示了一个更普遍的教训:同样的 底层技术能力(namespaces+cgroups),因为抽象的封装对象不同(系统 vs 应用),最终催生出的生态繁荣程度可以有天壤之别。

参考来源

- 位置:《凤凰架构:构建可靠的大型分布式系统》第11章"虚拟化容器"11.1.4节 "封装系统:LXC"(源文件:_epub-src对应OEBPS/Text/chapter132.xhtml) - 结论依据:原文用LAMP切换到LNMP、MySQL 5升级到8两个具体场景说明LXC "先装系统再装软件"的思路无法快速构造运行环境,并指出这决定了LXC不 可能形成今天的容器生态,直接支撑本卡片结论。 - 原始内容:LXC眼中的容器与OpenVZ和Linux-VServer定义的并无差别,是一种 封装系统的轻量级虚拟机,而Docker眼中的容器则是一种封装应用的技术 手段……以封装系统为出发点,仍是按照先装系统再装软件的思路,就永远 无法在一两分钟甚至十几秒钟就构造出一个合乎要求的软件运行环境。