Close

容器与虚拟机

了解容器和虚拟机 (VM) 之间的区别、各自的常用提供商以及如何一起使用它们

Ian Buchanan 头像
Ian Buchanan

首席解决方案工程师


容器和虚拟机是非常相似的资源虚拟化技术。虚拟化是一个过程,在这个过程中,RAM、CPU、磁盘或网络等系统单一资源可以“虚拟化”并表示为多个资源。容器和虚拟机之间的主要区别在于,虚拟机将整个计算机虚拟化到硬件层,而容器只虚拟化操作系统级别以上的软件层。

显示虚拟机和容器之间差异的容器。

什么是容器?


容器是轻量级软件包,包含执行包含的软件应用所需的所有依赖关系。这些依赖关系包括系统库、外部第三方代码包和其他操作系统级应用。容器中包含的依赖关系存在于高于操作系统的堆栈级别中。

优点

  • 迭代速度
    因为容器是轻量级的并且只包含高级软件,所以修改和迭代的速度非常快。
  • 稳健的生态系统
    大多数容器运行时系统都提供预制容器的托管公共存储库。这些容器存储库包含许多常用的软件应用,如数据库或消息传递系统,可以立即下载和执行,从而为开发团队节省时间

缺点

  • 共享主机漏洞
    容器都在操作系统层下共享同一个底层硬件系统,一个容器中的漏洞利用可能会突破容器并影响共享硬件。大多数流行的容器运行时都有预构建容器的公共存储库。使用某个公共镜像存在安全风险,因为它们可能包含漏洞利用或可能容易被邪恶行为者劫持。

热门容器提供商


代码构建图标
相关资料

Kubernetes 与 Docker

三环图标
查看解决方案

使用 Compass 来管理组件

  • Docker
    Docker 是最受欢迎和使用最广泛的容器运行时。Docker Hub 是一个庞大的公共存储库,其中包含流行的容器化软件应用。Docker Hub 上的容器可以立即下载并部署到本地 Docker 运行时。
  • RKT
    RKT发音为“Rocket”,是一个以安全为先的容器系统。除非用户明确启用不安全的功能,否则 RKT 容器不允许使用不安全的功能。RKT 容器旨在解决其他容器运行时系统所面临的潜在交叉污染漏洞安全问题。
  • Linux 容器 (LXC)
    Linux 容器项目是一个开源 Linux 容器运行时系统。LXC 用于隔离操作系统级进程。Docker 实际上会在幕后使用 LXC。Linux 容器旨在提供供应商中立的开源容器运行时。
  • CRI-O
    CRI-O 是 Kubernetes 容器运行时接口 (CRI) 的实现,它允许使用与开放容器倡议 (OCI) 兼容的运行时。它是使用 Docker 作为 Kubernetes 运行时的轻量级替代方案。

什么是虚拟机?


虚拟机是大量的软件包,可以完全模拟 CPU、磁盘和网络设备等低级硬件设备。虚拟机还可能包含在模拟硬件上运行的补充软件堆栈。这些硬件和软件包结合在一起,可以生成功能齐全的计算系统快照。

优点

  • 完全隔离安全
    虚拟机作为完全独立的系统单独运行。这意味着虚拟机不受共享主机上其他虚拟机的任何漏洞利用或干扰。单个虚拟机仍可能被漏洞利用劫持,但被利用的虚拟机将被隔离,无法污染任何其他相邻的虚拟机。
  • 交互式开发
    容器通常是运行容器所需的预期依赖关系和配置的静态定义。虚拟机更具动态性,可以交互式开发。一旦为虚拟机指定了基本硬件定义,虚拟机就可以被视为裸机计算机。可以手动将软件安装到虚拟机上,还可以拍摄虚拟机快照以捕获当前的配置状态。虚拟机快照可用于将虚拟机还原到该时间点,或使用该配置启动其他虚拟机。

缺点

  • 迭代速度
    虚拟机的构建和重新生成非常耗时,因为它们包含一个完整的堆栈系统。对虚拟机快照的任何修改都可能需要很长时间才能重新生成和验证其行为是否符合预期。
  • 存储大小成本
    虚拟机可能会占用大量存储空间。它们的大小可以迅速增长到几千兆字节。这可能会导致虚拟机主机出现磁盘空间不足的问题。

热门虚拟机提供商

  • Virtualbox
    Virtualbox 是甲骨文旗下的免费开源 x86 架构仿真系统。Virtualbox 是最受欢迎、最成熟的虚拟机平台之一,其辅助工具生态系统可帮助开发和分发虚拟机镜像。
  • VMware
    VMware 是一家上市公司,其业务建立在最早的 x86 硬件虚拟化技术之上。VMware 附带了一个虚拟机管理程序,该管理程序是一种用于部署和管理多个虚拟机的实用程序。VMware 具有用于管理虚拟机的强大用户界面。VMware 是提供支持的绝佳企业虚拟机选项。
  • QEMU
    QEMU 是最强大的硬件仿真虚拟机选项。它支持任何通用硬件架构。QEMU 是一个仅限命令行的实用程序,不提供用于配置或执行的图形用户界面。这种权衡使得 QEMU 成为最快的虚拟机选项之一。

哪个选项更适合您?


如果您的项目有特定的硬件要求,或者您正在一个硬件平台上进行开发,并且需要瞄准另一个硬件平台,例如 Windows 或 macOS,则需要使用虚拟机。大多数其他“仅软件”要求可以使用容器来满足。

如何将容器和虚拟机结合使用?


尽管实际用例可能有限,但容器和虚拟机是完全可能的。可以创建模拟唯一硬件配置的虚拟机。然后可以在此虚拟机的硬件中安装操作系统。虚拟机正常运行并启动操作系统后,可以在操作系统上安装容器运行时。此时,我们有了一个带有仿真硬件的功能计算系统,我们可以在该系统上安装容器。

这种配置的一个实际用途是进行片上系统部署的实验。Raspberry Pi 或 BeagleBone 开发板等流行的片上系统计算设备可以仿真为虚拟机,以便在实际硬件上进行测试之前尝试在其上运行容器。

但是在大多数情况下,您的需求可能会由其中一种来满足。根据您的虚拟化需求在容器或虚拟机之间做出决定的关键是了解您的资源需求以及您愿意做出的权衡。

Ian Buchanan
Ian Buchanan

虽然 Ian 在 Java 和 .NET 领域拥有丰富而深厚的经验,但他最广为人知的身份是对大型企业采取敏捷开发方法的拥护者。目前,他专注于新兴的 DevOps 文化和可支持更好的持续集成、持续交付和数据分析的工具。在他的职业生涯中,他成功管理了处在各个生命周期阶段的所有企业软件开发工具。他曾推动了企业范围的流程改善,提高了工作效率、产品质量和客户满意度。他建立了多个重视自我导向和自我管理的跨国团队。不说话或编码的时候,Ian 总是沉迷于解析器、元编程和领域特定语言。通过 @devpartisan 关注 Ian。


分享这篇文章
下一个主题

推荐阅读

将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。

Devops 示意图

Compass 社区

克服障碍插图

教程:创建组件

地图插图

免费试用 Compass

注册以获取我们的 DevOps 新闻资讯

Thank you for signing up