dockerd是docker架构的中枢执行者,作为常驻后台服务进程,统一调度容器生命周期、镜像管理、网络与存储,并通过containerd和runc协同完成底层容器创建与隔离。

Dockerd 是 Docker 架构的中枢,不是辅助工具,而是整个系统实际干活的“执行者”。你敲下的每一条 docker run、docker build 或 docker ps,最终都由它解析、调度、落地——没有 dockerd,Docker 就只是个发不出去请求的空壳。
它本质是一个后台服务进程
dockerd 启动后就常驻内存,不依赖终端,也不随命令退出。它持续监听请求(默认通过 /var/run/docker.sock),一旦收到指令,立刻协调底层组件执行。这不是“等你按回车才启动”的程序,而是开机即运行、长期值守的服务。
- 启动方式通常是 systemd 自动拉起,也可手动运行
dockerd命令 - 配置集中存于
/etc/docker/daemon.json,比如镜像加速器、存储驱动、日志选项 - 进程名就是
dockerd,用ps aux | grep dockerd可直接看到
它不直接操作容器,而是指挥 containerd 和 runc
从 Docker 1.11 起,容器运行时逻辑已完全下放给 containerd。dockerd 的角色变成“调度员”:把用户命令拆解成任务,再通过 gRPC 调用 containerd;containerd 进一步调用 runc 创建真实容器进程,并用 shim 进程托管,确保 dockerd 重启时容器不中断。
- 你执行
docker run nginx,dockerd 先校验镜像、准备 rootfs,再通知 containerd 拉取并启动 - 真正调用
clone()系统调用创建 namespace 和 cgroups 的,是 runc - containerd-shim 进程作为容器的父进程,隔离了容器与 dockerd 的生命周期依赖
它统一管理所有 Docker 对象
镜像、容器、网络、卷——这些不是各自独立的模块,而是由 dockerd 统一建模、持久化、状态追踪的对象。例如创建 bridge 网络时,dockerd 不仅调用 iptables 配置规则,还会记录网络元数据到本地数据库(/var/lib/docker/network/files/),并确保容器启动时自动接入。
- 镜像管理:处理
pull/push/build流程,分层缓存、内容寻址都由它组织 - 容器生命周期:create → start → running → stop → rm,每个状态变更都经它校验和触发
- 网络与存储:决定使用 overlay2 还是 vfs 驱动,为 volume 分配路径,为容器挂载 bind mount
它定义了 Docker 的安全边界
默认只监听本地 Unix socket,意味着只有宿主机上具备文件权限(通常是 docker 组成员)的用户才能控制 Docker。一旦开启 TCP 监听(如 -H tcp://0.0.0.0:2375),等于把 root 权限暴露在网络中——这正是生产环境必须配 TLS 的根本原因。
- 通信协议是 HTTP over Unix socket 或 HTTPS over TCP,所有请求走 REST API
- CLI、Compose、CI 工具甚至旧版 Kubernetes 的 dockershim,都是它的客户端,身份平等但权限受控
- 权限模型基于 socket 文件权限或 TLS 客户端证书,不依赖 Docker 内部账号体系











