Docker 采用了 C/S(客户端/服务端)架构,包括客户端和服务端。Docker 守护进程(Daemon)作为服务端接受来自客户端的请求,并处理这些请求(创建、运行、分发容器)。
客户端和服务端既可以运行在一个机器上,也可通过 socket 或者 RESTful API 来进行通信。

从图中可以看到,Docker 客户端通过 docker pull、docker run 等命令与守护进程交互;守护进程所在的主机上运行着多个相互隔离的容器;镜像的查找与分发则由 Host 与 Docker Index(仓库)之间的通信完成。
Docker 守护进程一般在宿主主机后台运行,等待接收来自客户端的消息。
Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker 守护进程交互。