全文(含图)连结:浅谈虚拟机(VM)与容器(Container)之差异
在现今网路世界中,「云服务」几乎是无所不在,而引领我们实践这一切的关键则是「虚拟化技术」。一般而言,云端应用服务是由实体伺服器 (Host) 上的「虚拟机 Virtual Machine (VM)」所提供。这些应用程式,是在开发人员 (Development Team) 发布完成后,转交给维运人员 (Operation Team),并于 VM 上运行。
选择VM所带来的好处
至于为何选择 VM,而非直接在实体伺服器上运行呢?以下仅列出三项主要的好处:
1.每个应用程式 (App) 拥有独立甚至相互不同的作业系统、环境
2.管理 Host 的资源 (CPU、RAM、Storage) 并分配于各 VM,供 App 有效利用
3.透过 Hypervisor 管理 VM 快照 (Snapshot),以实践灾难恢复 (Disaster Recovery)
容器 Container 的窜红
然而,科技始终来自于人的不满足。业界开始认为 VM 仍然佔用太多不必要的资源,因此「容器 Container」便窜红起来。容器的运作不会模拟硬体资源,故相对于 VM,容器并没有额外运行作业系统 (Guest OS)。简而言之,容器就是虚拟化「应用程序及其相对应的环境」。
容器所带来的好处就更多了,以下仅说明一小部分:
1.VM 的映像档通常落在数 GB 至数十 GB 都有,而容器映像档一般最大也才数百 MB。如此轻量级的特性,让映像档管理以及 App 的启动、关闭流程皆方便迅速许多。
2.容器的移转性强;只要在实体伺服器上安装了 Docker,无论 Host OS 为任何作业环境,皆能正常运行容器化后的应用程序。
3.容器拥有不可变的特性,意指只要 App 能正常运作一次,未来不必担心系统环境变动造成 App 出错。
4.透过 Docker 容器引擎,容器的开发、管理与运行非常简易,因此实践 DevOps 的运作 (Development + Operation),解决以往常见开发与维运立场不一的问题。
如此看来,容器似乎将完全掌握未来市场,并取代 VM 的所有应用!事实不然;至少目前还不至于。在选择使用容器或虚拟机时,有些很关键的因素必须深入考量,其中, App 所运作的环境便尤其重要。前面提及容器不可变之特性,虽然非常有利于 App 的运行,但同时也意味着将无法随意修改系统环境。如此一来,若维运人员需要升级或更动系统设置 (System Configuration) 时,则会遇到不少麻烦,通常也必须由开发人员协助深入改写程序。反之,在使用 VM 的情况下,维运人员将能够相对轻易地管理系统环境。
简单地做个总结:如果云服务符合以下两点中的任一条件,VM 的架构则较符合您的需求。
1.在 App 运行的环境中,维运人员需要管理到系统底层
2.必须建构在许多不同的作业系统之上
除此之外,大部分的情况下将建议把 App 容器化,跟上时代趋势,藉此提升市场竞争力。
撰文: 陈逸凡 迎栈科技解决方案架构师