Docker 是什么?
Docker 不是虚拟机(Virtual Machine),而是一个容器化(Containerization)平台。
关键区别:
| 特征 | 虚拟机 (VM) | Docker 容器 |
|---|---|---|
| 隔离级别 | 完整的硬件虚拟化,每个VM有自己的操作系统内核 | 进程级隔离,共享主机操作系统内核 |
| 启动速度 | 慢(分钟级) | 极快(秒级) |
| 资源占用 | 高(每个VM需要完整的OS) | 低(共享主机内核) |
| 镜像大小 | 大(GB级别) | 小(MB级别) |
它们之间的关系:
1. Docker 容器
- 本质:只是运行在主机上的一个特殊进程
- 特点:使用Linux内核的命名空间(namespaces)和控制组(cgroups)实现隔离
- 比喻:像是一个"豪华的沙箱",进程以为自己独占系统,但实际上共享内核
2. WSL2 (Windows Subsystem for Linux 2)
- 是什么:微软开发的Linux兼容层,在Windows上运行Linux二进制文件
- 特点 :
- 使用一个轻量级的虚拟机运行Linux内核
- 比传统VM更高效,与Windows紧密集成
- Docker Desktop for Windows 依赖 WSL2 来运行Linux容器
3. Ubuntu
- 是什么:一个完整的Linux操作系统发行版
- 与Docker的关系 :
- Ubuntu 可以 作为Docker容器的基础镜像(如
ubuntu:20.04) - Ubuntu 也可以作为运行Docker的主机操作系统
- 在Windows上,你可以在WSL2中安装Ubuntu,然后在Ubuntu中运行Docker
- Ubuntu 可以 作为Docker容器的基础镜像(如
典型Windows用户的设置流程:
你的Windows电脑
↓
启用WSL2功能
↓
在Microsoft Store安装Ubuntu(或其他Linux发行版)
↓
安装Docker Desktop for Windows
↓
Docker Desktop配置使用WSL2后端
↓
现在你可以在Windows终端中运行Linux容器
类比说明:
想象一栋公寓楼:
- 虚拟机 = 每个房间都有完整的厨房、浴室、卧室(完全独立)
- Docker容器 = 每个房间共享大楼的水电管道,但有自己的家具和布局
- WSL2 = 这栋公寓楼建在Windows"土地"上,但遵守Linux"建筑规范"
- Ubuntu = 其中一种房间装修风格(还有其他如CentOS、Alpine等)
在你的课程场景中:
bash
# 当你运行这个命令时:
docker run -v /host/path:/container/path cis548/docker-env
# 发生了什么:
1. Docker从镜像仓库下载 `cis548/docker-env` 镜像
2. 创建一个容器(一个隔离的进程环境)
3. 挂载你的本地目录到容器内
4. 在容器内启动bash shell
5. 你在容器内操作,但文件实际上存储在主机上
总结:
- Docker ≠ 虚拟机,更轻量,更高效
- WSL2 ≠ Docker,WSL2是让Windows能运行Linux环境的基础设施
- Ubuntu ≠ Docker,Ubuntu是一个操作系统,可以作为Docker镜像或运行Docker的主机
- 它们协作:Windows → WSL2 → (可选Ubuntu) → Docker → 你的容器应用
这就是为什么在课程中,老师让你先确保Docker Desktop运行正常,因为它依赖于WSL2(在Windows上),而WSL2提供了运行Linux容器所需的环境。