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 安装与第一个容器] — 待完成