一、Docker总架构
Docker对用户而言是一个简单的C/S架构,用户通过客户端与服务器端建立通信,而Docker的后端是一个松耦合的架构,架构中的模块各司其职、有机组合,支撑着Docker运行。
docker架构中主要的模块有:DockerClient、DockerDaemon、Docker Registry、Graph、Driver、libcontainer以及Docker Container。
Docker客户端是用户与Docker交互的主要方式,用户通过命令行或者图形界面与Docker API通信,向Docker Daemon发出请求来创建、管理、启动、停止或删除容器等。
Docker Daemon是运行在主机上的后台服务,负责接收来自Docker客户端的请求,管理本地的Docker对象(如镜像、容器、网络等),并执行这些请求。Docker Daemon内部所有的任务均由Engine来完成,且每一项工作都以一个Job的形式存在。
Driver是Docker用来与底层操作系统的存储和网络子系统交互的接口。不同的驱动程序可以实现不同的存储和网络后端,比如使用AUFS、OverlayFS等文件系统来实现镜像层的存储,使用bridge、overlay等网络驱动来实现容器之间的网络通信。
libcontainer是一套独立的容器管理解决方案,这套解决方案涉及了大量Linux内核方面的特性,如:namespaces、cgroups以及capabilities等。libcontainer很好地抽象了Linux的内核特性,并提供完整、明确的接口给Docker Daemon。
总架构图
二、Docker Daemon
Docker Daemon是Docker架构中一个常驻在后台的系统进程。所谓的“运行Docker”,即代表运行Docker Daemon。总之,DockerDaemon的作用主要有以下两方面:1、接收并处理Docker Client发送的请求;2、管理所有的Docker容器。
Docker Daemon运行时,会在后台启动一个Server,Server负责接收Docker Client发送的请求;接收请求后,Server通过路由与分发调度,找到相应的Handler来处理请求。Docker Daemon的架构大致可以分为三部分:Docker Server、Engine和Job。 Docker Daemon架构图: