docker 结构
Docker采用了C/S架构,包括客户端
和服务端
。
Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者 RESTful API 来进行通信。
Docker daemon一般在宿主机后台运行,等待接收来自客户端的消息。
用户使用Docker Client
与Docker Daemon
建立通信,并发送请求给后者。
Docker Daemon作为Docker架构中的主体部分,首先提供Server的功能使其可以接受Docker Client的请求;而后Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在。Job的运行过程中,当需要容器镜像时,则从Docker Registry中下载镜像,并通过镜像管理驱动graphdriver将下载镜像以Graph的形式存储;当需要为Docker创建网络环境时,通过网络管理驱动networkdriver创建并配置Docker容器网络环境;当需要限制Docker容器运行资源或执行用户指令等操作时,则通过execdriver
来完成。
而libcontainer是一项独立的容器管理包,networkdriver
以及execdriver
都是通过libcontainer
来实现具体对容器进行的操作。当执行完运行容器的命令后,一个实际的Docker容器就处于运行状态,该容器拥有独立的文件系统,独立并且安全的运行
docker client、docker daemon(server)、registry三者关系:
镜像与容器的转换及与registry关系