虚拟机与容器

如果你平时主要使用 Windows 或 macOS,但后续实验需要 Linux 系统、专用测试工具或一个相对独立的操作环境,你并不需要专门买一台新电脑,也不需要把现有硬盘格式化后安装双系统。我们可以借助虚拟化技术,在当前操作系统内部运行另一套完整系统。

这样做的最大好处是:实验环境可以单独保存、随时恢复,也不会轻易影响你日常使用的主力电脑。

为什么需要虚拟机

安全实验常常涉及安装工具、修改配置、尝试可疑程序,甚至可能导致系统无法正常启动。如果直接在自己的 Windows 或 macOS 系统中操作,风险会比较高。

虚拟机可以提供一个独立的“沙盒”环境:

  • 你可以在里面自由测试软件;
  • 即使系统被误删、崩溃或配置错误,也不会直接破坏宿主机;
  • 实验前后可以通过快照快速恢复环境;
  • 不同课程实验可以放在不同虚拟机中,避免相互干扰。

对初学者来说,虚拟机是一个比较稳妥的练习环境。

什么是虚拟机

虚拟机(Virtual Machine,简称 VM) 是由虚拟化软件模拟出来的一台“独立计算机”。这台计算机有自己看似独立的操作系统、硬盘、内存和网卡,但这些资源最终都运行在你真实的物理电脑上。

这里的虚拟化软件通常称为 Hypervisor,也就是虚拟机管理程序。你可以把它理解为一层负责管理虚拟机的系统,它决定虚拟机能使用多少 CPU、内存、网络和磁盘资源。

几个常见概念:

  • 宿主机(Host):承载虚拟机的物理电脑,以及电脑本身安装的操作系统。例如你的 Windows 11 笔记本。
  • 客户机(Guest):运行在虚拟机内部的操作系统。例如你在 VirtualBox 中安装的 Kali Linux。
  • 虚拟资源:虚拟机管理程序会为客户机提供虚拟 CPU、虚拟内存、虚拟网卡和虚拟硬盘。它们看起来像独立硬件,但实际仍由宿主机的真实硬件支撑。

需要特别注意:虚拟机的资源来自宿主机。如果宿主机物理内存总共只有 16 GB,而你给虚拟机分配了 8 GB,那么宿主机自身可用的内存会相应减少。虚拟机不是凭空产生性能,它仍然依赖你的电脑硬件。

常见且易于上手的个人桌面虚拟机工具有:

  • VirtualBox:开源免费,适合学习和实验;
  • VMware Workstation:功能成熟,常用于本地虚拟环境管理。

虚拟磁盘与快照

虚拟机和普通电脑类似,也有“硬盘”和“系统分区”。不过在宿主机看来,虚拟机里的整个系统文件通常只是一个普通大文件。

虚拟磁盘文件

虚拟机中的“C 盘”或“根分区”,在宿主机中可能只是一个 .vdi、.vmdk 等格式的磁盘镜像文件。

你在虚拟机内部创建、修改或删除文件,大多数情况下都被限制在这个虚拟磁盘文件内部。也就是说,虚拟机里的操作一般不会直接污染宿主机桌面、下载目录或“我的文档”。

这也是为什么我们可以把虚拟机当成一个隔离的实验盘。

快照机制

快照(Snapshot) 是虚拟化技术中非常实用的功能。

快照会保存虚拟机在某一时刻的完整状态,包括磁盘内容、系统配置以及当时的运行条件。你可以把它理解为“游戏存档”。

在实际实验中,建议养成这个习惯:

  • 安装基础系统后,先创建一个“初始环境”快照;
  • 进行高风险配置前,再创建一个“修改前”快照;
  • 测试某个工具或脚本前,创建一个“实验前”快照;
  • 如果虚拟机被搞坏,只要恢复快照,就能回到之前的正常状态。

需要注意的是,快照不是屏幕截图。它不是保存当前画面,而是保存虚拟机磁盘层面的状态还原点。

快照仍然依赖宿主机的存储。如果宿主机硬盘损坏,或者你从未把虚拟磁盘文件独立备份到其他设备,快照并不能代替真正的跨设备备份。

容器与虚拟机的区别

除了完整的虚拟机,现代云计算和开发环境中还经常使用容器技术,例如 Docker。

虚拟机和容器都可以用来隔离应用,但它们的工作方式不同。

虚拟机

虚拟机模拟的是一整台计算机。每一台虚拟机都会启动自己独立的操作系统内核,拥有自己的系统环境和运行空间。

特点:

  • 隔离程度较高;
  • 可以运行不同操作系统,例如在 Windows 宿主机里运行 Linux 虚拟机;
  • 启动速度相对较慢;
  • 资源占用通常更高。

容器

容器不模拟完整硬件,也不运行独立的操作系统内核。所有容器通常共享宿主机的操作系统内核,利用 Linux 内核中的命名空间(Namespaces)和控制组(Cgroups)等机制,为应用创建相互隔离的运行环境。

特点:

  • 启动速度更快,通常可以在毫秒级到秒级完成;
  • 资源消耗更低;
  • 更适合部署应用和微服务;
  • 隔离模型与虚拟机不同,通常不如完整虚拟机那样独立。

在 Windows 或 macOS 上使用 Docker 时,背后通常也会借助一个轻量级的 Linux 虚拟机环境来提供 Linux 内核。也就是说,跨平台使用容器时,底层机制可能仍然与虚拟机有关。

虚拟机运行各自内核,Linux 容器共享承载它们的 Linux 内核

简单来说:

  • 虚拟机更像“在电脑上运行另一台电脑”;
  • 容器更像“在同一个系统内核上,为每个应用单独划分运行空间”。

分清当前环境在哪里

学习本课程时,你可能会同时看到多个操作窗口。此时最重要的是:始终清楚当前命令和文件操作发生在哪个环境里。

常见环境包括:

  1. 宿主系统(本机) 你自己使用的物理电脑,运行 Windows、macOS 或 Linux。

  2. 本地虚拟机(Local VM) 运行在你本机上的虚拟机,例如 VirtualBox 或 VMware 中的 Kali Linux。

  3. 远端实验容器(Remote Lab) 点击平台上的“启动实验”后,由远程服务器为你创建的临时实验环境。

本机编辑器、本地 Kali 与远端 Lab 中的程序位于不同环境

当你在浏览器中访问远端 Lab 的网页或终端时,浏览器只是显示界面和传输数据的窗口。实际命令仍然运行在远程实验容器中。

因此:

  • 你在远端 Lab 终端里创建的文件,保存在远程容器里;
  • 这些文件不会自动出现在你的本机桌面、下载目录或本地硬盘中;
  • 远端实验容器通常是临时性的;
  • 当实验提交、超时或环境关闭后,远程容器可能会被销毁并重置;
  • 重要的实验记录、截图、命令输出或笔记,应及时保存回本机。

一句话总结:

在哪里执行命令,文件就保存在哪里。远端环境不是你的电脑硬盘。

自测:远端终端里的笔记

远端终端里的笔记

练习

你通过浏览器打开 Lab 终端,在该终端环境中成功保存了 report.txt。你既没有下载它,也没有复制回本机。随后,这个 Lab 实例被回收,平台重新创建了一个初始实例。

哪一项判断正确?

  • A. report.txt 原本属于旧 Lab 环境;不能因为曾经保存成功,就认为新实例或本机中一定还保存着它。
  • B. report.txt 一定会自动进入本机“下载”文件夹。
  • C. 只要浏览器仍然安装在电脑上,旧 Lab 中的文件就会保留。
  • D. 重新打开终端时,系统会自动从浏览器恢复旧实例中的所有文件。

请提交选项字母。

提交答案

题解 Hint