基本架构

Docker 目前采用了标准的 C/S 架构,包括客户端服务端两大核心组件,同时通过镜像仓库来存储镜像。客户端和服务端既可以运行在一个机器上,也可通过 socket 或者 RESTful API 来进行通信。

服务端

服务端主要包括四个组件:

  • dockerd为客户端提供 RESTful API,响应来自客户端的请求,采用模块化的架构,通过专门的 Engine 模块来分发管理各个来自客户端的任务。

  • docker-proxy:是 dockerd 的子进程,当需要进行容器端口映射时,docker-proxy 完成网络映射配置。

  • containerd:是 dockerd 的子进程,提供 gRPC 接口响应来自 dockerd 的请求,对下管理 runC 镜像和容器环境。

  • containerd-shim:是 containerd 的子进程,为 runC 容器提供支持,同时作为容器内进程的根进程。

客户端

Docker 客户端为用户提供一系列可执行命令,使用这些命令可实现与 Docker 服务端交互。

客户端默认通过本地的 unix:///var/run/docker.sock 套接字向服务端发送命令。如果服务端没有监听在默认的地址,则需要客户端在执行命令的时候显式地指定服务端地址。例如,假定服务端监听在本地的 TCP 连接 1234 端口为 tcp://127.0.0.1:1234,只有通过 -H 参数指定了正确的地址信息才能连接到服务端:

镜像仓库

Docker 使用镜像仓库(Registry)在大规模场景下存储和分发 Docker 镜像。镜像仓库提供了对不同存储后端的支持,存放镜像文件,并且支持 RESTful API,接收来自 dockerd 的命令,包括拉取上传镜像等。

Last updated

Was this helpful?