Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Docker 核心概念

一、Docker 的本质

Docker = 利用 Linux 内核能力(Namespace + cgroups + UnionFS), 把应用进程“隔离、限制、打包、分发、运行”的一整套工程体系。

⚠️ Docker 不是虚拟机

⚠️ 容器不是 OS

⚠️ Docker 本质是 进程管理 + 文件系统抽象

二、Docker 解决了什么问题(Why)

1️⃣ 环境一致性

  • 开发 / 测试 / 生产环境不一致
  • “在我机器上是好的”

Docker 用 镜像 固化环境。

2️⃣ 部署复杂度

  • 手动装环境
  • 配置不可追溯

Docker 用 Dockerfile -> Image -> Container 标准化流程。

3️⃣ 资源利用率

  • 虚拟机浪费资源
  • 启动慢

Docker 直接跑在宿主机内核上,进程级虚拟化。

三、Docker 的三大底层基石(必须会)

1️⃣ Namespace —— 隔离(Isolation)

Namespace 解决的是:“容器里的进程,为什么以为自己是独占系统?”

Linux Namespace 让一个进程看到的是“假的世界”。

Namespace 作用
PID 进程号隔离
NET 网络隔离
MNT 挂载点隔离
IPC 进程通信隔离
UTS 主机名隔离
USER 用户隔离

📌 结果:

  • 容器里 ps 看不到宿主机进程

  • 容器有自己的 IP

  • 容器有自己的 hostname

  • 👉 隔离 ≠ 虚拟化

  • 👉 仍然是宿主机内核

2️⃣ cgroups —— 资源限制(Limitation)

cgroups 解决的是:“容器不能把宿主机拖死”

限制内容:

  • CPU(配额 / 权重)
  • 内存(最大值)
  • IO
  • PID 数量

例:

docker run --memory=512m --cpus=1 nginx

📌 没有 cgroups,容器只是“裸进程”。

3️⃣ UnionFS / OverlayFS —— 联合文件系统 / 分层文件系统(Layer)

解决:“镜像如何复用?为什么那么小?”

镜像是多层叠加的只读层:

Layer 1: ubuntu
Layer 2: apt install python
Layer 3: copy app

容器启动后:

RW Layer (container)
RO Layers (image)

📌 写时复制(Copy-On-Write)

四、Docker 核心对象模型(What)

1️⃣ Image(镜像)

定义:

  • 只读
  • 不可变
  • 分层

📌 镜像 = rootfs + metadata

2️⃣ Container(容器)

定义:

  • 镜像的运行实例
  • 本质是一个 Linux 进程
  • 有自己的 Namespace + cgroups + FS

⚠️ 容器应当是:

  • 短生命周期
  • 可随时销毁
  • 无状态

3️⃣ Dockerfile

作用:

  • 描述“如何构建镜像”
  • 每条指令 -> 一个镜像层

📌 Dockerfile 是 声明式构建描述,不是脚本。

4️⃣ Registry

作用:

  • 镜像的分发系统
  • 支持 tag / digest / manifest

五、Docker 架构原理(How)

Docker 运行流程

docker run nginx
Docker CLI
dockerd
containerd
runc
Linux Kernel

📌 Docker 不是直接启动容器。

组件职责

组件 职责
docker CLI 用户接口
dockerd 容器生命周期管理
containerd 容器运行管理
runc 真正调用内核创建容器
OCI 标准

六、Docker 网络基础理论

默认 bridge 网络

container
docker0 bridge
iptables NAT
宿主机网卡
  • 📌 NAT 转发
  • 📌 容器 IP 私有

host 网络

  • 无 Namespace
  • 与宿主机共用网络栈
  • 性能最好

overlay 网络(集群)

  • VXLAN
  • 跨宿主机容器通信

七、Docker 存储基础理论

为什么容器不能存数据?

  • 容器可随时销毁
  • 写入 overlayfs 性能差
  • 容器迁移困难

Volume 原理

container
volume mount
host FS
  • 📌 volume 绕过 overlayfs
  • 📌 高性能、持久化

八、Docker 与虚拟机的本质区别

维度 Docker VM
内核 共享 独立
虚拟层级 进程级 硬件级
启动 秒级 分钟
资源
密度

九、Docker 的工程哲学(非常重要)

1️⃣ 不可变基础设施

  • 不修改容器
  • 通过构建新镜像发布

2️⃣ 一个容器一个进程

  • 简化生命周期
  • 易扩缩容

3️⃣ 无状态设计

  • 状态外置(DB / volume)

十、本质问题

Q:Docker 是不是虚拟化?

❌ 不是

✅ 进程隔离

Q:Docker 安全吗?

✅ 安全依赖:

  • 内核版本
  • seccomp / apparmor
  • 是否 root
  • 镜像来源

Q:Docker 和 Kubernetes 的关系?

  • Docker:单机容器技术
  • Kubernetes:容器编排系统

十一、总结

Docker 是进程,不是虚拟机

容器隔离来自内核,不是 Hypervisor

镜像是不可变的分层文件系统