docker容器生态是分层协作的技术体系,包含核心技术层(namespace、cgroups、unionfs)、平台技术层(kubernetes、swarm)和支持技术层(calico、prometheus、harbor),各组件通过oci规范协同工作。

Docker 容器生态不是单个工具,而是一套分层协作的技术体系。想真正掌握它,不能只学 docker run 命令,得从底层机制出发,再逐层向上理解各组件的定位和协同逻辑。
先搞清三层结构,避免学偏
Docker 生态按功能划分为三个清晰层次:
- 核心技术层:让容器跑起来的“地基”,包括 Linux namespace(隔离进程/网络/文件系统)、cgroups(限制 CPU/内存/I/O)、UnionFS(如 overlay2,支撑镜像分层)
- 平台技术层:让容器在多机集群中规模化运行,比如 Kubernetes(编排)、Docker Swarm(轻量编排)、Rancher(管理平台)
- 支持技术层:保障容器稳定可用的“周边能力”,例如 Calico(网络策略)、Prometheus + cAdvisor(监控)、Harbor(带权限与扫描的私有 Registry)、Fluentd(日志收集)
聚焦关键组件,理清调用链路
实际运行一个容器时,背后是多个组件接力协作:
- 你敲
docker run nginx,Docker CLI 发请求给 dockerd(Docker Daemon) - dockerd 调用 containerd 管理容器生命周期(创建、启停、销毁)
- containerd 再调用 runc(符合 OCI 标准的 runtime)真正创建并启动进程
- runc 底层依赖 namespace 和 cgroups 实现隔离与资源控制
这个链条里,OCI(Open Container Initiative)是关键粘合剂——它定义了镜像格式(image spec)和运行时行为(runtime spec),确保不同工具(比如 Podman、CRI-O)能兼容同一镜像。
动手验证比死记概念更有效
建议边学边做几件具体的事:
- 查看当前容器用了哪些 namespace:
ls -l /proc/<pid>/ns/</pid>(进容器找 PID,观察 net、pid、mnt 等软链接指向) - 限制容器内存并验证效果:
docker run -m 100m --rm -it alpine free -h,对比不限制时的输出 - 用
docker image inspect nginx看镜像的分层结构,再结合docker history nginx理解每层来源 - 启一个 containerd 容器(不用 Docker):
sudo ctr run --rm -t docker.io/library/alpine:latest test-alpine sh,体会脱离 Docker CLI 的底层操作
避开常见学习误区
- 不要一上来就深挖内核源码,先建立“组件分工→数据流向→典型命令”的闭环认知
- 别把 Docker Engine 当成唯一入口,了解 containerd + runc 是现代生产环境的标准组合(Kubernetes 已弃用 dockershim)
- 镜像构建别只写 RUN 指令,重点练多阶段构建(multi-stage)、.dockerignore、合理利用缓存层顺序
- 学网络时不只记
--network bridge,要动手抓包看容器间通信路径,理解 veth-pair、iptables、CNI 插件的作用边界
掌握这套架构,你就不再只是“会用 Docker”,而是能判断该用什么工具解决什么问题,也能在出问题时快速定位到 namespace 配置、cgroups 限额或存储驱动层面。











