Docker 是一个开源应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。虚拟机可以虚拟出一个完成的沙盒化平台,让开发者可以在完全隔离实体机的状态下开发或者运行程序。两者有什么区别呢?
上图详解
在上图中,左侧为 VM,右侧为 CONTAINER。
VM 和 CONTAINER 的最底层皆为基础设施服务器。
VM 第二层「倒数」为虚拟化平台,而 CONTAINER 则是主机系统。
VM 第三层运行虚拟系统,在虚拟系统中安装对应服务,最后运行应用。
CONTAINER 第三层则是自身容器,在容器内运行对应服务,及相关的应用。
容器一般会封装类库及应用,无需像虚拟机那样分别搭建。
两则对比
对比表格:
CONTAINER | VM | |
---|---|---|
启动速度 | 秒级 | 分钟 |
运行性能 | 接近原生 | 百分之 95 |
磁盘占用 | MB | GB |
数量 | 成百上千 | 约十几台 |
隔离能力 | 进程级别 | 系统级别 |
操作系统 | 只支持 Linux | 几乎所有 |
封装程度 | 只打包项目代码和依赖关系 | 完整操作系统 |
对比详解
CONTAINER 的启动速度极快,几乎是秒级的;VM 则是分钟级,因为要等里面运行的虚拟系统慢慢的启动。
CONTAINER 因为是进程级别运行,几乎是原生级运行性能;VM 是系统内再虚拟系统,所以会有性能耗损。
CONTAINER 占用的资源极小,几百 MB 即可跑一个服务;VM 不用说别的,就单虚拟系统就要几个 GB 了。
CONTAINER 因为占用资源小,故一台服务器运行百个千个不成问题;VM 的资源占用较大,所以一台服务器无法跑太多。
当前的 CONTAINER 内部环境只支持 Linux,所以一些运行在 Windows 的程序无法被封装;VM 则没有任何限制,因为它支持几乎所有的操作系统。
CONTAINER 只能打包项目代码和依赖关系,所以可运行的应用程序有限;VM 可运行完整操作系统,所以理论支持所有应用。
条评论