Docker基础架构
Docker目前采用了标准的C/S架构,包含客户端、服务端两大核心组件,同时通过镜像仓库来存储镜像。客户端和服务器既可以运行在一台机器上,可以可以通过socket或RESTful API来进行通信。架构拓扑如下:
-
服务端
Docker服务端一般在Docker Host后台运行,dockerd作为服务端接受来自客户端的请求,并通过containerd具体处理与容器相关的请求,包括创建、运行,删除容器等。服务器端主要包含四个组件:
-
dockerd:为客户端提供RESTful API,响应来自客户端的请求,采用模块化的架构,通过专门的Engine模块来分发管理各个来自客户端的任务。可以独立升级;
-
docker-proxy:是dockerd的子进程,当需要进行容器端口映射时,docker-proxy完成网络映射配置;
-
containerd:是dockerd的子进程,提供gRPC接口响应来自dockerd的请求,对下管理runC镜像和容器环境。可以独立升级;
-
containerd-shim:是dockerd的子进程,为runC容器提供支持,同时作为容器内进程的根进程。
-
runC:是从Docker公司开源的libcontainer项目演化而来,目前作为一种具体的开放容器标准实现加入Open Container Initiavie(OCI)。runC已经支持了Linux系统中容器相关技术栈,同时正在实现对其他操作系统的兼容。
-
客户端
Docker客户端为用提供一系列可执行命令,使用这些命令可实现与Docker服务端交换。