Docker是一个开源的应用容器引擎,主要利用Linux内核namespace实现沙盒隔离,用Cgroup实现资源限制。 Docker 支持三种镜像层次的存储driver:aufs、device mapper、Btrfs。
我们首先介绍一下Docker的系统架构。
Docker采用一种c/s的结构,如下图所示,由Client和Daemon两部分组成。
Docker Daemon主要由三部分:Server,Engine和Job。
Docker Daemon启动时首先进行一些初始化操作,如初始化network,创建grapdriver,创建execdriver等等。在初始化结束后,Docker Daemon启动Server负责监听Docker Client发来的请求,Server的运行以及其对Docker Client端请求的响应都是以Job的形式在Engine中完成的。
Engine是Docker架构中的运行引擎,同时也是Docker的核心模块。一个Job可以认为是Docker架构中Engine内部最基本的工作执行单元。Docker可以做的每一项工作,都可以抽象为一个Job。Docker Client负责对命令行的解析,其运用反射机制将命令行转换成函数的形式通过某种协议与Docker Daemon进行通信,通过Router以RPC的方式调用Server相应功能。
目前,Docker支持三种调用方式:fd,unix socket,http。值得注意的是,Docker Daemon向Docker Client提供的所有功能都是以Handler的方式注册到Engine中的。举例说明,Engine的Handler对象中有一项为:{"create":daemon.ContainerCreate},则说明当名为"create"的Job在运行时,执行的是daemon.ContainerCreate的Handler。这样做的好处是增加了系统的可扩展性,添加新功能时只需简单的将其注册到Engine中即可。
Paste_Image.png
网友评论