docker client是用户操作的统一入口,作为命令行工具(如docker run、build)将指令翻译为api请求发给daemon;daemon是后台引擎,负责镜像拉取、容器创建、网络配置等全部实际工作;registry是镜像仓库,支持镜像的存储与分发。

Docker Client 是用户操作的统一入口
Docker Client 不是后台服务,而是一个命令行工具(比如 docker run、docker build),负责把用户的指令翻译成 API 请求,发给 Docker Daemon。它本身不执行任何容器或镜像操作,只做“传话人”。你也可以用其他方式调用它,比如通过 REST API 写脚本,或者用 Docker Compose 这类高级工具——它们底层都是在和 Client 打交道。
Docker Daemon 是真正干活的后台引擎
Docker Daemon(进程名 dockerd)运行在宿主机上,监听来自 Client 的请求,并完成所有实际工作:拉取镜像、创建容器、配置网络、挂载卷、限制资源(靠 cgroups)、清理临时层等。它管理着本地所有的 Docker 对象,包括镜像、容器、网络和 volume。Daemon 启动后会持续运行,除非被手动停止或系统重启。多个 Client 可以同时连接同一个 Daemon,适合团队共享一台构建机或 CI 环境。
Registry 是镜像的存储与分发中心
Registry 就是镜像的“仓库”,Docker 默认使用 Docker Hub,但你也可以部署私有 Registry(如 Harbor)。当执行 docker pull nginx 时,Client 发起请求,Daemon 负责和 Registry 建立连接、校验权限、下载分层数据并解压到本地存储;反过来,docker push myapp:latest 则由 Daemon 把本地镜像打包上传。镜像名中的前缀(如 harbor.example.com/project/app)就决定了推拉目标 Registry 的地址。
三者协作完成一次典型容器启动
以 docker run -d -p 8080:80 nginx 为例:
- Client 解析命令,构造 HTTP 请求,发给本地 Daemon(通常走 Unix socket)
- Daemon 检查本地是否有 nginx 镜像;没有则自动从默认 Registry 拉取
- Daemon 创建新容器,分配网络、挂载可写层、设置端口映射,最后启动进程
- 结果返回给 Client,Client 输出容器 ID 并退出











