Appearance
第 07 课 · 容器与虚拟机
隔离有轻有重:工位、标准化隔间、独立分公司。
作者:曹宇春
先记住这个类比
| 方式 | 类比 | 隔离强度 | 开销 |
|---|---|---|---|
| 普通进程 | 各部门工位 | 低 | 小 |
| 容器(Docker) | 标准化实验隔间,共享公司总管 | 中 | 中 |
| 虚拟机(VM) | 楼里再建一整栋分公司(自带总管) | 高 | 大 |
容器靠 Linux 内核的 namespace(各看各的进程树/网络) 和 cgroup(限 CPU/内存额度)。
正式概念(人话版)
为什么 Mac 上 Docker「更重」?
容器特性绑在 Linux 内核上。
macOS 内核不是 Linux → Docker Desktop 往往先起一个 Linux 虚拟机,容器跑在 VM 里。
≈ 先租一层 Linux 分部,再在里面开隔间。
所以:VM + 容器两层内存,16GB Mac 很容易顶满。
和 git worktree 的差别
| git worktree | Docker | |
|---|---|---|
| 隔离什么 | 代码目录 | 运行环境(依赖、网络视图、限额) |
| 典型用途 | 多 Agent 改同一仓库不撞车 | 部署一致、依赖隔离 |
多 Cursor Agent:优先 worktree(便宜);要复现服务器环境:再上 容器。
在你电脑上看一眼
bash
# 若装了 Docker
docker info 2>/dev/null | head -25
docker ps 2>/dev/null
# 未安装时至少理解:进程列表里有无 Docker / 虚拟机相关进程
ps aux | grep -iE 'docker|lima|qemu|virtual' | grep -v grep | head不用 Docker 时本课也值得读:很多「云函数 / CI」本质是别人机房里的隔离隔间。
开发里什么时候用得上
- 「本地能跑、服务器挂」:环境不一致——容器就是用来对齐的
- Mac 内存紧:少挂常驻容器;用完
docker compose down、清无用镜像 - 数据库进容器:方便,但记住数据卷也在吃仓库空间
练习
- 口述:进程、容器、VM 三种隔离的差别(各一句)。
- 若你用 Docker:看当前跑了几个容器、大概吃多少内存。
小结
- 容器共享内核、隔离视图与配额;VM 自带内核
- Mac Docker ≈ Linux VM + 容器
- 开发并行改代码:worktree;对齐运行环境:容器
下一课:手册怎么变成上班中的部门——从源码到进程。