Docker初学者需要了解的几个知识点(一):传统虚拟机 VS容器

传统虚拟机

如VMware,上学时老师应该都教过的。通俗点可以理解成:在你的电脑里 “装了另一台完整的电脑”

举个例子:

假设你的电脑是 “大房子”(宿主机器),VMware 就像一个 “隔断工具”,能在大房子里隔出几个 “独立小房间”。每个小房间里,都有自己的 “墙壁”(隔离环境)、“家具”(操作系统,比如 Windows 7、Linux)、“电器”(软件、程序)。

这么说,是不是像极了“带独立厨卫的出租公寓”(每个公寓有自己的门、墙、水电厨卫,完全独立)。

这些 “小房间”(虚拟机)和你的 “大房子”(宿主电脑)互不干扰:

  • 你在虚拟机里装软件、删文件,甚至搞崩系统,都不会影响外面的宿主电脑。

  • 每个虚拟机都需要 “独立供电”(占用宿主的 CPU、内存、硬盘),比如你给虚拟机分配 2G 内存,宿主电脑就会少 2G 可用内存。

核心特点:

  1. “全套照搬”:每个虚拟机里都得装完整的操作系统(比如从 Windows XP 到 Windows 11,或者各种 Linux),就像真的买了一台新电脑一样。

  2. “启动慢”:启动虚拟机时,得像开一台新电脑那样,等操作系统加载完(比如几分钟),不像打开普通软件那么快。

  3. “吃资源”:因为是完整的系统,所以占用的内存、硬盘空间都比较多(比如一个 Windows 虚拟机可能要占几十G硬盘)。

什么时候用?

比如你想同时用 Windows 和 Linux 系统,又不想买两台电脑,就可以用 VMware 装个 Linux 虚拟机;或者测试软件时怕搞坏自己的系统,就在虚拟机里 “大胆尝试”。

简单说,VMware 这类虚拟机的核心就是:在一台电脑里 “模拟多台完整电脑”,隔离性强,但比较 “笨重”

容器(Container)

举个例子:

如果传统虚拟机是 “带独立厨卫的出租公寓”(每个公寓有自己的门、墙、水电厨卫,完全独立),那容器就是 **“青年旅社里的出租床位”**——这么说来,那容器的确是更轻更小一些。

青年旅社的床位(容器)里,只有你睡觉必需的铺盖、枕头(对应应用程序、依赖库、配置参数)—— 这些是 “能让你躺下休息(应用运行)” 的最低必需品,多一点都不带

核心特点:

  1. “轻量”:因为不装完整系统,所以启动特别快(秒级,像打开一个普通软件),占用的内存、硬盘也少很多(比如一个容器可能只占几十 M,而虚拟机要占几 G)。

  2. “隔离但共享”:盒子之间互相隔离(你在 A 盒子里改东西,不影响 B 盒子),但都共用宿主电脑的 “底层地基”(操作系统内核),不像虚拟机那样各自搞一套。

  3. “随身带”:这个盒子可以打包好,拿到任何装了 Docker 的电脑上直接用,不用重新配置环境(比如你在自己电脑上做好的容器,拷贝到公司电脑上,打开就能跑,不会出现 “我这能跑,你那跑不了” 的问题)。

什么时候用?

比如开发一个网站,需要 Python 环境、特定版本的数据库,你可以把这些 “必需品” 打包成一个容器,发给同事,他不用手动装环境,直接启动容器就能运行你的网站,省了一堆配置麻烦。

简单说,容器就是 **“给应用打包的轻量工具,方便携带、快速启动、省资源”**。

传统虚拟机与容器的相似性

尽管技术原理不同,但传统虚拟机和容器在 “解决问题的目标” 上高度一致,主要体现在以下几点:

  1. 隔离性
    两者都能实现应用运行环境的隔离,避免不同应用之间的干扰。

    • 传统虚拟机:通过虚拟硬件层隔离,每个虚拟机有独立的操作系统(如 Windows、Linux),应用运行在虚拟机内部,与主机和其他虚拟机完全隔离。

    • 容器 :通过操作系统内核的隔离技术(如 Linux 的namespace)隔离,容器内的应用只能访问分配给它的资源,与主机和其他容器的进程、网络等资源隔离。

  2. 环境一致性
    两者都能解决 “环境差异” 问题:

    • 传统虚拟机:将应用和完整的操作系统打包,在任何支持虚拟化的主机上都能运行(例如:在 Windows 主机上用 VMware 运行一个包含 Linux+Python 的虚拟机,换一台电脑也能正常启动)。

    • 容器 / Docker:将应用和依赖(而非完整系统)打包成镜像,在任何支持 Docker 的环境中都能一致运行(例如:开发者本地构建的 Docker 镜像,部署到服务器上无需重新配置依赖)。

  3. 资源分配能力
    两者都能限制应用使用的资源(如 CPU、内存、磁盘):

    • 传统虚拟机:创建时需预先分配固定的 CPU、内存、磁盘空间(例如:给虚拟机分配 2 核 CPU、4GB 内存)。

    • 容器 / Docker:通过cgroups(Linux 控制组)动态限制资源使用(例如:限制容器最多使用 1 核 CPU、2GB 内存)。

传统虚拟机与容器的关联性

在实际场景中,传统虚拟机和容器并非对立关系,反而经常根据场景需求配合使用(注意:容器本身可以脱离虚拟机独立运行,这里仅介绍现实中常见的关联场景):

容器运行在虚拟机中

由于容器依赖底层操作系统内核(如 Linux 容器依赖 Linux 内核),在非 Linux 主机(如 Windows、macOS)上运行 Docker 时,通常需要借助虚拟机:

  • Windows/macOS 的 Docker Desktop 默认会启动一个轻量级 Linux 虚拟机(WSL 2 本质也是一种特殊的虚拟机),容器实际运行在这个虚拟机内部。
  • 服务器场景中,也可能先在物理机上创建虚拟机(用于硬件级隔离),再在虚拟机内部运行 Docker 容器(用于应用级隔离)。

混合部署场景

对于需要强隔离性的应用(如涉及敏感数据的服务),可能使用传统虚拟机;对于轻量、快速迭代的应用(如 Web 服务、微服务),则使用容器。两者可以共存于同一套 IT 架构中。

虚拟机作为容器的 “宿主环境”

云厂商(如 AWS、阿里云)的容器服务(如 ECS、Kubernetes 集群)通常运行在虚拟机之上:先通过虚拟化技术将物理机资源分割为虚拟机,再在虚拟机中部署容器编排平台,最终运行容器。

总结

容器是在 “解决传统虚拟机的痛点” 过程中,基于新的技术思路诞生的 “替代方案”。

它们更像是 “平行技术”,各有擅长的领域 —— 就像带独立厨卫的出租公寓和青年旅社的床位,不是 “升级版” 的关系,而是 “不同需求下的选择”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值