架构是一个很大的概念,也绝非一两篇文章能写清楚的,这里记录本身认为重要的部分和相关的学习资料。linux
Docker 总架构图docker
docker 系统使用了 C/S 的架构,docker client 经过 REST API 请求 docker daemon 来管理 docker 的镜像和容器等。json
Server 端驻守在后台,称之为 docker daemonubuntu
Client 端是一个 CLI 程序,能够在命令行中经过 docker
这个二进制文件进行交互api
Docker client 是给用户和 Docker daemon 创建通讯的客户端,安装了 docker 以后,二进制文件 docker
就是 Docker client,与 Docker daemon 交互,实现对 Docker image 和 container 的管理请求。bash
Docker client 与 docker daemon 创建请求的方式有三种,分别是:架构
tcp://host:portcurl
unix://path/to/socketsocket
fd://socketfdtcp
Docker daemon 是一个常驻后台的系统进程,所谓“运行 docker”,指的就是运行 Docker daemon,其做用主要有如下两点:
接受并处理 Docker Client 发送的请求
管理全部的 Docker containers 和 Docker images
Docker daemon 的架构大体能够分为三部分:Docker Server、Engine 和 Job。
Docker daemon 架构示意图
Docker Server 专门服务于 Docker Client,其做用是接受并调度分发 Docker client 发送的请求。
Engine 是 Docker 中的运行引擎, 是其运行的核心模块。Engine 中存储着大量的容器信息,也管理着 Docker 大部分 Job 的执行。
Job 是 Docker 中最基本的工做执行单元,Docker daemon 能够完成的每一项工做都能呈现为一个 Job。
Linux
下,使用 dockerd
命令,即可以 daemon 模式操做 docker
。
docker daemon 会监听 unix:///var/run/docker.sock
的 socket,提供一个 RESTful 的 Remote API,可供客户端访问,例如:
curl --unix-socket /var/run/docker.sock http:/containers/json\?all\=1
即可获得全部的容器列表,至关于在 terminal 中执行了 docker ps -a
命令。
注:若是须要本身实现
docker client
的,可访问 Docker Remote API 参考相关文档。
docker daemon 监听来自 remote api 的请求的方式有三种,unix、tcp 和 fd。
默认状况下,监听的是 unix:///var/run/docker.sock
,在 linux
下,想要改变其监听方式,可使用 dockerd
命令:
dockerd -H 0.0.0.0:5555
即可将 docker daemon 的监听方式变为 tcp://host:port
的方式,而后客户端能够
docker -H :5555 pull ubuntu
来访问 daemon
。