如果某些老旧的模块与当前环境不兼容,那就麻烦了。开发者常常会说:"它在我的机器可以
跑了"(It works on my machine),言下之意就是,其他机器很可能跑不了。
环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。很多人想到,能不能从根本上解
决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。
二、虚拟机
虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行
另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,因为
虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要
了就删掉,对其他部分毫无影响。
虽然用户可以通过虚拟机还原软件的原始环境。但是,这个方案有几个缺点。
(
1
)
资
源
占
用多
虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕
虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运
行。
(
2
)
冗
余
步
骤
多
虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。
(
3
)
启
动
慢
启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。
三、Linux 容器
由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux
Containers,缩写为 LXC)。
Linux
容
器
不是
模
拟
一个
完
整
的
操
作系
统
,
而是对
进
程
进
行
隔
离
。
或者说,在正常进程的外
面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与
底层系统的隔离。
由于容器是进程级别的,相比虚拟机有很多优势。