Docker 实践(一):了解架构

架构是一个很大的概念,也绝非一两篇文章能写清楚的,这里记录本身认为重要的部分和相关的学习资料。linux

Docker 总架构图docker

C/S 架构

docker 系统使用了 C/S 的架构,docker client 经过 REST API 请求 docker daemon 来管理 docker 的镜像和容器等。json

  • Server 端驻守在后台,称之为 docker daemonubuntu

  • Client 端是一个 CLI 程序,能够在命令行中经过 docker 这个二进制文件进行交互api

Docker client

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 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,可供客户端访问,例如:

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

相关文章
相关标签/搜索