Docker 与虚拟机与 NAS
日期:2026-07-28
前文:2026_0728_01_云服务器初始配置与SSH密钥认证
一、三者分别是什么
Docker(容器引擎)
Docker 是一个应用打包和运行平台。它把应用及其所有依赖(代码、运行时、系统库、配置)打包成一个"镜像",这个镜像可以在任何安装了 Docker 的机器上原样运行。
核心思想:一次打包,到处运行。
开发环境跑得通 → 测试环境跑得通 → 生产环境跑得通。
因为这三个环境用的是同一个镜像,不存在"我机器上没问题啊"。
| 核心概念 | 是什么 | 类比 |
|---|---|---|
| 镜像(Image) | 应用的只读模板,包含运行应用所需的一切 | 蛋糕模具 |
| 容器(Container) | 镜像的运行实例,有自己的文件系统、进程空间、网络 | 用模具做出的蛋糕 |
| 仓库(Registry) | 存放和分发镜像的地方(Docker Hub / 私有仓库) | 模具商店 |
虚拟机(Virtual Machine)
虚拟机是通过Hypervisor(虚拟机管理器)在物理硬件上模拟出一台完整的虚拟计算机。每台 VM 有自己的虚拟 CPU、内存、硬盘、网卡,以及独立的操作系统内核。
常见的 Hypervisor:
- VMware Workstation / VirtualBox — 装在 Windows/macOS 上,你本地跑靶机用的
- KVM — Linux 内核内置,云厂商(腾讯云/阿里云/AWS)底层用的就是这个
NAS(Network Attached Storage,网络附加存储)
NAS 是一台专门用来存文件的设备,通过网线连在你的路由器上,局域网内所有设备都能访问它。本质上就是一台插了很多硬盘的小型服务器,只不过操作系统被简化成了文件管理专用。
常见形态:
- 品牌成品:群晖(Synology)/ 威联通(QNAP)——买来即用,贵但省心
- 自建 DIY:旧电脑 / 树莓派 + 多块硬盘 + TrueNAS / Unraid 系统——便宜但折腾
注意:NAS 和 Docker/虚拟机不在同一个维度上比较。NAS 是一个硬件设备 / 文件服务,Docker 和虚拟机是虚拟化技术。你可以在 NAS 上跑 Docker,也可以在 NAS 上跑虚拟机——它们可以组合使用。
二、Docker 与虚拟机的架构区别
虚拟机架构: Docker 容器架构:
┌─────────────┬─────────────┐ ┌─────────────┬─────────────┐
│ App A │ App B │ │ App A │ App B │
├─────────────┼─────────────┤ ├─────────────┼─────────────┤
│ Bin/Libs │ Bin/Libs │ │ Bin/Libs │ Bin/Libs │
├─────────────┼─────────────┤ ├─────────────┴─────────────┤
│ Guest OS │ Guest OS │ │ Docker Engine │
│ (Ubuntu) │ (CentOS) │ ├───────────────────────────┤
├─────────────┴─────────────┤ │ Host OS (Ubuntu) │
│ Hypervisor │ ├───────────────────────────┤
│ (VMware / VirtualBox / KVM)│ │ 物理服务器 │
├───────────────────────────┤ └───────────────────────────┘
│ Host OS │
├───────────────────────────┤ 核心差异:
│ 物理服务器 │ 所有容器共享宿主机的 Linux 内核
└───────────────────────────┘ 没有 Guest OS 这个层级
没有 Hypervisor 这个层级
每个 VM 有自己完整的 OS
逐层对比
| 对比维度 | 虚拟机 | Docker |
|---|---|---|
| 虚拟化层级 | 硬件级(Hypervisor 模拟整台机器) | 操作系统级(共享内核,隔离进程) |
| 操作系统 | 每个 VM 有独立的完整 OS(~几百MB-几GB) | 无独立 OS,所有容器共用宿主机内核 |
| 启动速度 | 30 秒到 2 分钟(需启动完整 OS) | 1-3 秒(只启动进程) |
| 磁盘占用 | 每个 VM 几 GB 到几十 GB | 每个镜像几百 MB,多层共用基础层 |
| 内存占用 | Guest OS 本身就要占用 ~400MB-1GB | 容器本身几乎无额外系统开销 |
| 隔离强度 | 强——独立内核,一个 VM 崩溃不影响其他 | 较弱——共享内核,内核漏洞可能逃逸 |
| 可移植性 | 受 Hypervisor 类型限制,跨平台迁移麻烦 | 任何装了 Docker 的 Linux/Windows/Mac 都能跑 |
| 适用场景 | 需要完整 OS 环境、需要运行不同内核、需要强隔离 | 微服务、CI/CD、开发测试环境、快速部署 |
资源占用实测(以你的服务器 2C2G 为例)
跑 1 个虚拟机:
Host OS 空载 ≈ 400M
虚拟机 Guest OS ≈ 400M
虚拟机内应用 ≈ 300M
────────────────────────
总计 ≈ 1.1G
剩余 ≈ 900M(再来一个就危险了)
跑 1 个 Docker 容器:
Host OS 空载 ≈ 400M
Docker Engine ≈ 200M
容器(如 DVWA) ≈ 300M
────────────────────────
总计 ≈ 900M
剩余 ≈ 1.1G(还能跑 2-3 个轻量容器)
三、NAS 的工作原理与架构
本质上就是一台小型服务器
┌─────────────────────────────────────────────────┐
│ 你的局域网 │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ 你的电脑 │ │ 手机/平板 │ │ NAS 设备 │ │
│ │ (Windows) │ │ (WiFi) │ │ │ │
│ │ │ │ │ │ 3-4块硬盘 │ │
│ │ │ │ │ │ RAID 阵列 │ │
│ └────┬─────┘ └────┬─────┘ └──────┬───────┘ │
│ │ │ │ │
│ └─────────────┼───────────────┘ │
│ │ │
│ ┌──────┴──────┐ │
│ │ 路由器 │ │
│ └──────────────┘ │
└─────────────────────────────────────────────────┘
NAS 通过 SMB/NFS/AFP 等协议,把自己伪装成"本地硬盘"的样子。你在 Windows 资源管理器里看到的 \\192.168.1.100\share 实际上就是 NAS 上的一块硬盘。
NAS 和 Docker/虚拟机的区别
| 对比维度 | NAS | Docker / 虚拟机 |
|---|---|---|
| 本质 | 一台专用文件存储设备 | 虚拟化技术 |
| 核心功能 | 存文件、共享文件、备份、远程访问 | 隔离运行应用 |
| 硬件形态 | 独立物理设备(群晖盒子 + 硬盘) | 运行在已有服务器/PC 上 |
| 操作系统 | 专用的 NAS 系统(DSM / TrueNAS) | 无独立 OS(容器)/ 完整 OS(VM) |
| 主要用户 | 家庭文件共享、团队协作、数据备份 | 开发、测试、部署、安全研究 |
| 能否跑 Docker | —— | —— |
你不需要在当前这台服务器上折腾 NAS。
40G 磁盘做 NAS 没有实际意义。将来有需要时,另买一台设备(群晖入门款 / 树莓派 + 外置硬盘),或者云服务器上挂 100G+ 数据盘再考虑。NAS 是一个"有足够存储空间之后"的需求,不是现在的优先事项。
四、使用场景决策表
| 你要做的事 | 用什么 | 原因 |
|---|---|---|
| 练 Web 渗透靶机(DVWA/Pikachu/SQLi-Labs) | Docker | 轻量秒开,练完 docker-compose down 立刻释放资源 |
| 练完整渗透链 VulnHub 靶机 | Docker 版优先。没有 Docker 版则虚拟机 | 大部分热门靶机已有 Docker 版,没有的话用 VirtualBox 跑 ova |
| 练 Linux 系统管理(systemd/内核/驱动) | 宿主机本身或虚拟机 | Docker 容器里没有 systemd,不是完整的 Linux 系统 |
| 练 Windows 渗透 | 虚拟机 | 没有 Windows Docker 镜像 |
| 需要强隔离(跑恶意软件/病毒分析) | 虚拟机 | 容器共享内核,隔离不如虚拟机的完整 OS 隔离 |
| 部署个人博客 / 数据库 / 日常服务 | Docker | docker-compose up -d 一行搞定,升级和迁移都极其方便 |
| 学 Docker 本身(镜像/容器/Dockerfile/Compose) | 这台服务器 | 你的所有学习和练习都在这台服务器上完成 |
| 搭建家庭文件共享 / 备份 | NAS 设备(独立硬件) | 这台服务器容量不够,是后续规划 |
五、总结
三者关系(一句话版):
虚拟机 → 把一台物理机切成多个"假电脑",每台有自己的 CPU/内存/OS
Docker → 把应用打包成标准化箱子,在哪都能跑,共享一个 OS 内核
NAS → 插满硬盘的小服务器,专门用来存和共享文件
你的当前决策:
2C2G 服务器 → 用 Docker 跑靶机和博客(虚拟机资源不够)
NAS → 以后有大量存储需求时再单独买设备
下一步:[Docker 安装与第一个容器] — 待完成