前几篇总结了Docker有关容器以及镜像方面的相关知识,从本篇开始我们就升华到了宏观方向的学习,这次我们来了解一下Docker的CS模式。

在前面的学习中我们了解到,Docker是以客户端和守护进程的方式来运行,本篇我们就来详细了解Docker的CS模式是如何运行的。

一、Docker的C/S模式介绍

下图为Docker官方提供的Docker的CS运行模式的介绍:

在Docker Client中来运行Docker的各种命令,而这些命令会传送给在Docker的宿主机上运行的Docker的守护进程。而Docker的守护进程是负责来实现Docker的各种功能。
下面的图是去掉了一些没有用的信息,专注于Docker的客户端与守护进程的描述:

如图所示,Docker的守护进程运行在宿主机上,也就是我们常说的“C/S架构”的Server(服务)端,守护进程会在启动后,一直在后台运行,负责实现Docker的各种功能。而Docker的使用者并不会直接与守护进程进行交互,而是要通过Docker的客户端,也就是我们在前面演示过的Docker的命令行接口,来与Docker守护进程进行通信。而这个命令行接口,也就是我们在Shell中执行Docker命令时运行的二进制程序,它是Docker最主要的用户接口,用来从用户处接收Docker的命令,并且传递给守护进程;而守护进程将命令执行的结果返回给客户端,返显示在命令行接口中。

二、Remote API

除了上面提到的客户端的命令行接口,Docker也提供了另外的与守护进程进行通信的方式。这就是Remote API。
Remote API和我们常见的网络平台提供的API非常相似,它也是一个RESTful风格的API。我们可以通过Remote API与Docker的守护进程进行通信。也就是说,我们可以通过编写程序,调用这个API,来将我们自己的程序与Docker进行集成。
Docker的Remote在某些复杂的情况下,也支持以下方式进行交互:
STDIN、STDOUT、STDERR
备注:标准输入(STDIN)、标准输出(STDOUT)、标准错误输出(STDERR)

下面这幅图我们可以看到,通过Remote API的形式,来实现Docker的C/S架构的模式:

用户可以与自定义的程序(JAVA、C++等)进行交互,而这些程序通过调用Remote API与Docker的守护进行进行协作。

大家可以通过Docker的官方网站,来访问Remote API的语言参考:
https://docs.docker.com/reference/api/docker_remote_api/
后面的总结也会详细介绍Remote API的使用。

至此,我们知道了Docker的CS模式的大致执行模式,那么Docker的客户端是如何与守护进程进行通信的呢?

三、Docker客户端与守护进程的通信方式

Docker的客户端与守护进程,实际上是通过Socket进行连接的。
Docker提供了三种进行Socket连接的模式:
(1)Unix的端口模式
unix:///var/run/docker.sock
(2)TCP协议的host:port模式:
tcp://host:port
(3)fd的Socket模式
fd://socketfd
其中,Unix的端口模式是Docker默认的客户端与守护进程的连接方式。我们也可以通过配置进行修改,来使用其它的Socket连接方式。

下图就是一个完整的Docker的C/S模式的运行方式:

用户可以通过命令行接口,或者自定义的应用,来与客户端进行连接。这个客户端可以是Docker提供的二进制程序(Shell中运行的Docker命令),也可以是用户自定义的程序,而这个程序是通过调用Remote API来调用Docker的服务。而Docker的客户端与Docker的服务端是通过Socket进行连接,这种连接本身也就意味着,Docker客户端与服务端既可以在同一台机器,也可以在不同机器上运行。也就是Docker的客户端可以通过远程访问的方式,来访问Docker的服务端。在后面的学习中,会详细介绍这种连接方式。

下面通过演示,来进一步理解这一过程。

四、连接演示

刚才我们了解到,Docker的守护进程,在启动后,会一直运行,那么我们就可以使用Linux的PS命令,来查看当前进程中是否已经启动了Docker的服务:

我们使用“grep”来过滤Docker关键字。我们看到的第一条就是正在运行的Docker的守护进程。
我们在命令行中使用的Docker命令,实际上就是使用的Docker的客户端程序在与守护进程进行交互。我们运行version命令:

其中的“server API version”指的就是我们刚刚讲的Remote API的版本。

下面我们再来演示Docker的Remote API是什么样子。这里我们需要使用Linux的netcat(nc)的命令,来实现socket的连接:

注意:没有nc命令,使用“yum install -y nc”即可安装。
上面我们使用“-U”来指明使用的是socket,Docker使用的socket地址为“/var/run/docker.sock”。回车后,就已经成功连接了socket:

此时我们使用socket来发起一个http的指令,用来查看Remote API中的一个接口---info,这个接口用来返回Docker的相关信息。后面的“HTTP/1.1”为指定的协议类型。我们看到返回的结果就是通过Docker的Remote API所返回的结果,这个结果使用了json的格式。(这里我始终得不到JSON反馈,了解的童鞋请帮忙分析一下原因)

这里我们介绍的都是通过本机来访问,无论是通过Docker的客户端还是Remote API。我们前面讲,Docker的C/S模式本身也可以支持远程的访问,在后面的学习总结中,会对这种远程访问进行介绍。

参考资料:
《极客学院Docker学习》教学视频

转载请注明出处:https://blog.csdn.net/acmman/article/details/85474728

【Docker学习总结】11.Docker的CS模式相关推荐

  1. Docker学习四:Docker 网络

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  2. Docker学习二:Docker镜像与容器

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  3. Docker学习一:Docker简介与安装

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  4. Docker学习五:Docker 数据管理

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  5. Docker学习笔记2 -- Docker的基本命令和使用

    目录 Docker学习笔记1 Docker帮助命令 Docker镜像命令 Docker容器命令 Docker commit操作 Docker学习笔记1 Docker学习笔记1 – Docker基本原理 ...

  6. Docker学习三:Docker 数据管理

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  7. docker学习笔记(五)docker实战

    目录 一.搭建MySQL高可用集群(pxc+HA-Proxy) 二.Nginx+Spring Boot+MySQL 一.搭建MySQL高可用集群(pxc+HA-Proxy) 参考链接:https:// ...

  8. Docker学习之三:docker镜像管理

    Docker镜像 一个host可以启动多个容器,基于镜像可在容器中启动不同的应用.如果本地无此镜像,docker可自动连接到docker registry上下载镜像,存储到本地文件系统(如overla ...

  9. Docker学习笔记--1.Docker原理、容器

    Docker的安装 Docker的基本构成 Docker架构图 镜像(image): 1 Docker 镜像(Image)就是一个只读的模板.镜像可以用来创建 Docker 容器,一个镜像可以创建很 ...

  10. Docker学习笔记 之 Docker安装配置使用

    简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare met ...

最新文章

  1. C#调用Oracle存储过程分页
  2. Java 计算学生的平均成绩
  3. 直播预告 | AAAI 2022论文解读:基于能量的主动域自适应学习方法
  4. python适配器模式角色_python设计模式-适配器模式
  5. JAVAEE框架之Spring JdbcTemplate
  6. Win配置Apache+mod_wsgi+django环境+域名
  7. linux安装 中文乱码怎么解决方法,Linux安装GBK/GB2312程序显示乱码的五种解决方法...
  8. MySQL_PHP学习笔记_2015_0614_PHP传参总结_URL传参_表单传参
  9. PHP设计模式——适配器模式
  10. wps安装Mathtype插件遇到的问题
  11. Win10Edge护眼色设置
  12. QT+Opencv配置+问题:During startup program exited with code 0xc0000135.
  13. Kali linux 学习笔记(二)环境优化(网络配置、软件安装、显卡优化、线程限制、电源优化) 2020.2.12
  14. linux下解压iso镜像文件方法
  15. [学习笔记]Java如何处理EXCEL的读取
  16. 王者荣耀抢先服服务器维修,王者荣耀抢先服异常怎么办 抢先服异常说明公告...
  17. K-means聚类与EM算法
  18. Python|判断闰年与平年
  19. SAP VT实习(钻石级杰出人才计划)面经SAP大致介绍
  20. 在ubuntu上安装nodebb

热门文章

  1. 开胃甜点.4.-【RM周边工具索引】——RM旗舰套餐
  2. 迅雷C++试题及解答
  3. 2022Java面试题,非常全面
  4. 武夷商城--项目简介
  5. itcast-spring
  6. 数据采集及部分数据标注平台工具说明
  7. 9月份全国计算机二级查询时间,全国计算机二级成绩(九月份)什么时候出来...
  8. 回收站删除的文件恢复,保姆级教学
  9. 2022硬刚PLUS德施曼年度峰会:多款领航旗舰发布,引领高端市场
  10. 装备制造业多项目管理实践与思考︱湖北海工院项目管理室主任王景凤