Docker 架构与核心概念
Docker 采用「客户端-守护进程」架构:用户在终端敲的 docker 命令只是客户端,真正干活的是后台常驻的守护进程 dockerd。先把这条调用链和五大核心概念对上号,学后面的命令就有坐标了。
客户端-守护进程模型
docker CLI 把命令转成 REST API 请求发给 dockerd,dockerd 再交给 containerd 管理容器,最终由 runc 按标准创建进程:
docker 命令(CLI 客户端)
└─→ dockerd(守护进程,接收请求并调度)
└─→ containerd(管理容器生命周期)
└─→ containerd-shim + runc(创建并运行容器进程)
日常见到的 docker ps、docker run 都走这条链;其中 dockerd 只负责接口与调度,容器进程的实际运行由 containerd 层守护。
五大核心概念
| 概念 | 类比 | 一句话说明 |
|---|---|---|
| 镜像 image | 模板 / 类 | 只读的打包产物,描述「容器里装了什么」 |
| 容器 container | 运行实例 / 对象 | 镜像运行起来后的进程,可启、停、删 |
| 镜像仓库 registry | 应用商店 | 存放并分发镜像的地方(Docker Hub 等) |
| 数据卷 volume | 移动硬盘 | 容器外的持久化存储,容器删除后数据仍在 |
| 网络 network | 网线 + 虚拟交换机 | 让容器互通或对外提供服务的通道 |
镜像与容器的关系最像「类与对象」:一个镜像能 start 出多个互不影响的容器。
一次 docker run 发生了什么
敲下 docker run nginx 后,背后大致经历四步:
- CLI 解析参数并调用 REST API,请求 dockerd 运行容器;
- dockerd 发现本地没有 nginx 镜像,先去镜像仓库拉取;
- containerd 按镜像内容准备好根文件系统并拉起进程;
- runc 依据 OCI 规范创建出真正的容器进程,进程存活期间由 containerd 守护。
标准化意义:OCI 与 runc
OCI(Open Container Initiative)是开放容器标准组织,它定义了「镜像长什么样、容器怎么运行」的公开规范;runc 是符合该规范的默认容器运行时。正因为接口标准化,Docker 镜像也能被其他符合 OCI 的运行时(containerd、podman 等)直接使用。
小结
docker 命令只是客户端,真正干活的是 dockerd → containerd → runc 这条调用链;镜像、容器、仓库、卷、网络五大概念是所有命令的操作对象,先在脑中建立这张图,再往下逐章掌握具体命令。