Docker 了解架构
Docker 总架构图
C/S 架构
docker 系统使用了 C/S 的架构,docker client 通过 REST API 请求 docker daemon 来管理 docker 的镜像和容器等。
- Server 端驻守在后台,称之为 docker daemon
- Client 端是一个 CLI 程序,可以在命令行中通过
docker
这个二进制文件进行交互
Docker client
Docker client 是给用户和 Docker daemon 建立通信的客户端,安装了 docker 之后,二进制文件 docker
就是 Docker client,与 Docker daemon 交互,实现对 Docker image 和 container 的管理请求。
Docker client 与 docker daemon 建立请求的方式有三种,分别是:
- tcp://host:port
- unix://path/to/socket
- fd://socketfd
Docker daemon
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 Remote Api
docker daemon 会监听 unix:///var/run/docker.sock
的 socket,提供一个 RESTful 的 Remote API,可供客户端访问,例如:
1 | 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
命令:
1 | dockerd -H 0.0.0.0:5555 |
便可将 docker daemon 的监听方式变为 tcp://host:port
的方式,然后客户端可以
1 | docker -H :5555 pull ubuntu |
来访问 daemon
。