01 - Docker 是什么
先从一个真实的痛点说起
你有没有遇到过这种情况:
- 你写的 AI 程序在自己电脑上跑得好好的,发给同学,他一运行——报错。
- 你本地用 Python 3.10,服务器是 3.8,一堆包装不上。
- 训练好的模型,换台机器 CUDA 版本不对,直接跑不起来。
这就是经典的一句话:
“在我电脑上是好的呀?“(It works on my machine.)
问题的根源是:程序不是孤立运行的,它依赖一大堆环境——操作系统、Python 版本、各种库、系统配置……换个环境,这些依赖对不上,程序就崩。
AI 开发尤其惨,因为我们的依赖特别重、特别多:Python、PyTorch、CUDA、cuDNN、几十个 pip 包……配环境配到怀疑人生。
Docker 用一句话解决这个问题
Docker 把你的应用 + 它需要的所有依赖环境,一起打包成一个标准的”集装箱”,这个集装箱搬到任何电脑上,都能一模一样地运行。
你不再交付”一份代码 + 一长串安装说明”,而是直接交付一个打包好、开箱即用的整体。
用集装箱来理解
Docker 的 logo 就是一头驮着集装箱的鲸鱼,这个比喻非常贴切:
- 没有集装箱的年代:货物五花八门,每次换船、换码头都要重新搬运、重新适配,又慢又容易出错。
- 有了标准集装箱:不管箱子里装的是什么,外面的尺寸都统一。任何船、任何码头、任何卡车都能直接装卸。
Docker 就是软件世界的标准集装箱:
- 箱子里:你的代码 + Python + 所有依赖库
- 箱子外:标准接口,任何装了 Docker 的电脑都能直接运行
[配图:一头鲸鱼背上驮着很多集装箱,每个集装箱标注”我的AI应用""Python3.10""PyTorch”等]
Docker 和虚拟机有什么区别?
很多人会问:这不就是虚拟机吗?不是。区别很大。
| 对比项 | 虚拟机(VM) | Docker 容器 |
|---|---|---|
| 打包内容 | 整个操作系统 + 应用 | 只打包应用 + 依赖 |
| 体积 | 几个 GB 起步 | 通常几十~几百 MB |
| 启动速度 | 几十秒~几分钟 | 秒级,甚至毫秒级 |
| 资源占用 | 重,每个 VM 独占内存 | 轻,共享主机内核 |
| 一台机器能跑几个 | 几个 | 几十上百个 |
一句话记忆:
虚拟机是”在你电脑里装了另一台完整的电脑”;Docker 是”只打包应用本身,共用你电脑的底座”。所以 Docker 又轻又快。
[配图:左边虚拟机——每个应用下面都背着一整个 Guest OS;右边 Docker——多个容器共享同一个底座,明显更薄]
小结
- 痛点:环境不一致,导致”换个地方就跑不起来”。
- Docker:把应用 + 依赖打包成标准”集装箱”,到哪都一样跑。
- 对比虚拟机:Docker 更轻、更快、更省资源。
理解了”是什么”,下一章我们来认识 Docker 的三个核心概念,搞懂它是怎么运转的。
下一章 → 02 - 三个核心概念