返回 ELI5 知识库首页 🐳 CONTAINERIZATION & CLOUD NATIVE
🐳 Containerization · Linux Namespaces & Cgroups · Build Once Run Anywhere

什么是 Docker(软件集装箱宇宙)?

过去程序员常说“在我电脑上明明能跑,怎么到你那就不行了?” —— 而 Docker 就像软件工业的标准化海运集装箱:把你的代码、Python 环境、配置文件和所有依赖统统打包进一个箱子,在全宇宙任何服务器上 0.1 秒开箱即跑

🏗️ 传统虚拟机 (VMware / VirtualBox)

盖一整栋大楼,动辄几十 GB

每个虚拟机都要虚拟出一整套完整的硬件(CPU/网卡/硬盘)并在上面安装一整套沉重的 Guest OS(如 Windows/Ubuntu)。启动耗时几分钟,内存开销巨大!

App A (业务代码) Guest OS (完整系统 20GB) App B (业务代码) Guest OS (完整系统 20GB) Hypervisor 虚拟化层 宿主机操作系统 & 物理硬件
  • 臃肿庞大:动辄几十 GB 镜像,迁移像搬家一样累
  • 启动龟速:必须走完整套 BIOS 与操作系统内核引导流程
VS
🐳 Docker 容器化 (共享主机内核)

独立精装单间,几 MB 秒级拉起

所有容器直接共享宿主机 Linux 内核,利用 Namespaces(视图隔离)和 Cgroups(资源配额)划出独立安全结界。体积仅需几十 MB,启动只要 0.1 秒

🐳 容器 A 仅含 App + 依赖 (50MB) 🐳 容器 B 仅含 App + 依赖 (30MB) 🐳 Docker Engine 守护引擎 共用宿主机 Linux 内核 (Namespaces & Cgroups) 服务器物理硬件 (CPU / 内存 / 硬盘)
  • 极度轻量:毫秒级启动,一台机器可并发跑上千个容器
  • 环境绝对一致:一次构建(Build Once),到处稳定运行(Run Anywhere)
💡

一句话顿悟:Docker 为什么能彻底消灭“环境配置地狱”?

过去交付软件就像只交给你图纸,让你在不同的施工队家里重头砌砖盖房(操作系统版本不同、C++ 动态链接库版本冲突...); 而 Docker 是直接在工厂里把精装房打包进集装箱整体吊装给你 —— 无论放到亚马逊云、阿里云还是你的 MacBook 上,里面的环境分毫不差!

拆解 Docker 核心宇宙的 4 大核心基石

从代码蓝图到容器隔离,搞懂云原生时代的标准操作流程

📜

1. Dockerfile 配方图纸

纯文本声明文件。逐行描述如何安装操作系统底座、拉取依赖包、复制项目源码以及暴露网络端口。

🧊

2. Image 镜像(只读模板)

Dockerfile 构建出来的静态只读“光盘 / 蛋糕模具”。采用分层存储(Layer),可以方便地上传至 Docker Hub 供全球拉取。

📦

3. Container 容器(运行实例)

镜像跑起来后的动态活体(用模具烤出来的蛋糕)。在只读镜像顶部挂载一层极薄的读写层,隔离独立运行。

🧅

4. OverlayFS 分层文件系统

洋葱式分层缓存机制:多个镜像共享相同的 Ubuntu 基础层,只需下载差异部分,极大节省磁盘与网络传输!

🕹️ Dockerfile 分层构建(Layered Build)显微镜

点击选择 Dockerfile 中的指令步骤,观察镜像如何像拼积木一样一层层叠加并复用缓存:

🚀 Layer 4 (只读元数据): ENTRYPOINT / CMD 启动命令
📦 Layer 3 (依赖库层): torch / fastapi 安装文件 (300MB)
📄 Layer 2 (配置清单): requirements.txt
🐧 Layer 1 (基础镜像): Debian Linux + Python 3.10 (120MB)
🐳 $ docker build -t my-ai-app:v1 .
Step 1/4 : FROM python:3.10-slim
---> Pulling fs layer [debian-core:latest]
---> Using cache: 8f4a1c2d3e (Base OS Ready)
✔ 分层缓存命中 · 避免重复构建
🎩 底层黑科技

Linux 障眼法:Namespaces & Cgroups

Namespaces 给进程戴上了“虚拟现实眼镜”,让它以为整台机器只有它一个进程(独立 PID/网络/挂载点);

Cgroups 则是铁面管家,严格限制这个容器最多只能用 2 核 CPU 与 4GB 内存,绝不让单个容器搞崩主机。

🚢 从单机到舰队

Docker 与 Kubernetes (K8s)

如果 Docker 制造了一个个标准集装箱;

那么 Kubernetes(K8s) 就是负责指挥几万艘集装箱货轮的超级港口调度中枢 —— 负责自动扩容、故障自愈与跨机房编排。

🤖 AI 时代的容器化

Nvidia-Docker 驱动 GPU 直通

在当今大模型训练中,Nvidia Container Toolkit (nvidia-docker) 将物理显卡的 CUDA 驱动直接打通挂载进容器。

使得千万卡算力集群能够随时随地秒级启动 PyTorch / vLLM 推理镜像,成为 AI 算力落地的统一标准。