版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/TM6zNf87MDG7Bo/article/details/80970541

序言

     闷热。无风。。。   

 

    非常久没写技术文章,所以今天分析一下docker相关的进程。

容器相关的进程

    安装容器的时候。一句话就够了,yum -y install docker-ce,前提是配置好docker的yum源,可是有的时候配置好了源,总是会发现timeout,呵呵哒。。

。尝试下阿里云的yum源。

    安装完毕docker之后,就会发现如上的文件。除去了相关的帮助文档,在当中能够看到,分为各种各样的二进制程序,docker表示为docker的client。一个命令行程序的使用。dockerd主要是服务端程序,在默认的情况下。client发送的请求都是由dockerd接收。而dockerd则是一个restfull的api接口;docker-containerd能够看出来包含三部分。一部分是client名称为ctr,一个是containerd用来提供grpc的接口,主要用来进行容器的管理,镜像的管理。存储和网络的管理。一个是containerd-shim,主要是用来执行容器的进程;而docker-runc则是容器的执行时。docker-proxy主要是来实现网络转发功能,docker-init看名字是初始化的意思,应该是初始化网络,生成相关的文件。

    在安装完毕之后,启动docker服务例如以下:

wx_fmt=png" alt="640?

wx_fmt=png" />

    启动完毕之后。就看到生成文件,执行时文件,而且生成了一个桥接的网络接口。

    容器的根文件夹主要用来存放一些镜像,网络配置情况,编译image的缓存。执行时环境,挂载的卷等元数据信息。

    在没有启动容器的时候。进程信息例如以下所看到的:

https://mmbiz.qpic.cn/mmbiz_png/7QpC8diafAtWKOPyclJqJTVTWFOGK8LKKdEJ6pWw1QKpzWJy8UgB02RulkmqOZGeqEDQiaSldEHPkIG0jrhCQLTA/640?wx_fmt=png" alt="640?wx_fmt=png" />

    执行一个容器之后,进程信息例如以下所看到的:

https://mmbiz.qpic.cn/mmbiz_png/7QpC8diafAtWKOPyclJqJTVTWFOGK8LKKibcN2Nxj7OGM7zea2zewNem2OyTCod8lHTxrYFyfs1jBccKE5FsareQ/640?wx_fmt=png" alt="640?

wx_fmt=png" />

    进程与线程:

wx_fmt=png" />

    从进程的id能够看出来。dockerd生成了docker-containerd,docker-containerd生成了docker-containerd-shim。那么docker-runc去哪里了。

    1、 docker-runc是容器的执行时,专门用来做容器的创建,启动,停止,删除操作,当每次执行完毕之后,就会退出。容器的执行时已经成为标准,在docker-ce里面使用的runc。而在原来的版本号中使用的lxc,其它的版本号还有rkt等。

    2、 docker-containerd-shim主要是来负责容器的执行,而且用来向docker-containerd来汇报容器的状态。从而容器的状态数据不用存放在内存中。而每一个容器都会使用一个docker-containerd-shim的进程来进行管理。

    3、 docker-containerd主要是用来负责容器生命周期的管理,镜像,存储,网络的管理。这个开放了一个grpc的接口。从而能够适配非常多平台,上层能够直接调用。而dockerd则是一个详细的实现,其它还有lxd等。

    4、 dockerd主要是服务端程序,提供了restfull接口,能够使用curl直接訪问

    支持远程訪问的时候。须要改动启动參数:

https://mmbiz.qpic.cn/mmbiz_png/7QpC8diafAtWKOPyclJqJTVTWFOGK8LKKdTqamodSCHguJaF4nc7vqFRAHpOcwjZCquQh01PVOXO6rT7iaXaULIQ/640?wx_fmt=png" alt="640?

wx_fmt=png" />

    查看执行时环境:

https://mmbiz.qpic.cn/mmbiz_png/7QpC8diafAtWKOPyclJqJTVTWFOGK8LKKwkibRY7ufccS110updUweicyDfjicFAiaTkzHDSWC8EgJ3UHPBI3QicSFTw/640?

wx_fmt=png" alt="640?wx_fmt=png" />

    为什么要使用docker-containerd-shim。主要是为了防止dockerd和containerd挂掉,也是为了热迁移做准备,例如以下杀掉containerd之后,依然能訪问容器的服务:

    无法连接docker主机(也有可能是docker服务未启动):

https://mmbiz.qpic.cn/mmbiz_png/7QpC8diafAtWKOPyclJqJTVTWFOGK8LKK3MnzMx4YQtbibqL6oktZTIzQNDdXWIP9L2AqEe9h1Aup6l21uMdegZg/640?

wx_fmt=png" alt="640?

wx_fmt=png" />

        

闲扯    

    当分析完这个进程之后。陷入了深深的沉思。。

。分析这些进程有个毛的用。。。

https://mmbiz.qpic.cn/mmbiz_png/7QpC8diafAtWKOPyclJqJTVTWFOGK8LKKQ9z8030kywthh5ucpwRFVqyjcicfhhhqsxPPkGd5Vu79LicHhvg42icjA/640?wx_fmt=png" alt="640?

wx_fmt=png" />

    查看服务是否启动,假设dockerd进程被杀,会被systemd自己主动拉起

wx_fmt=png" />

   

    假设带有有用性的目的去看这些进程。一点用处都没有。假设从了解原理的方面,倒是略有所获。从dockerd一个容器引擎分离出几个进程,containerd,shim,runc。除了标准化之外,也从另外一个方面说出了各个组件的专一职责原则。从而能够进行替换,并不怕一家公司进行垄断,另外在进行分层的时候。也表现了上层仅仅是对下层的一层的封装,并提供额外的功能,比如dockerd提供了从registry上传和下载的作用,而containerd则是提供管理容器生命周期的功能,而runc则是从执行容器的工具。

    从标准化的指定上来说。不管runc的标准话还是image的标准化。整体的目标是弱依赖,仅仅要提供对应的接口就能够提供服务,仅仅要符合标准,那么就是能够执行的。

    

docker进程分析的更多相关文章

  1. docker进程管理

    docker进程管理:http://www.open-open.com/lib/view/open1455412749917.html 写的太好!!!!示例很清楚,很全面!! 我做个summary吧. ...

  2. SQL Server 在线进程分析处理

    SQL Server 在线进程分析处理 前言 数据库在线进程处理在很多时候需要人为干预已达到预期管理目标,下面整理一下常用的在线进程管理方法,便于后续工作使用. 一.查看目标数据库在线进程,并杀死指定 ...

  3. mysql死锁-查询锁表进程-分析锁表原因【转】

    查询锁表进程: 1.查询是否锁表 show OPEN TABLES where In_use > 0;   2.查询进程     show processlist   查询到相对应的进程===然 ...

  4. 进程分析之CPU

    进程分析之CPU 进程分析之CPU 本文转载自:https://github.com/ColZer/DigAndBuried/blob/master/system/cpu.md 在<进程分析之内 ...

  5. DockerScan:Docker安全分析&测试工具

    DockerScan:Docker安全分析&测试工具 今天给大家介绍的是一款名叫DockerScan的工具,我们可以用它来对Docker进行安全分析或者安全测试. 项目主页 http://gi ...

  6. docker 进程 转载:https://www.cnblogs.com/ilinuxer/p/6188303.html

    今天我们会分析Docker中进程管理的一些细节,并介绍一些常见问题的解决方法和注意事项. 容器的PID namespace(名空间) 在Docker中,进程管理的基础就是Linux内核中的PID名空间 ...

  7. docker 进程 转载:

    今天我们会分析Docker中进程管理的一些细节,并介绍一些常见问题的解决方法和注意事项. 容器的PID namespace(名空间) 在Docker中,进程管理的基础就是Linux内核中的PID名空间 ...

  8. Linux0.11内核--fork进程分析

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5597818.html ] 据说安卓应用里通过fork子进程的方式可以防止应用被杀,大概原理就是 ...

  9. linux概念之进程分析

    http://blog.csdn.net/kevinx_xu/article/details/8178746 /proc 详解 内核线程分析报告 进程层次 [root@109-com1 scripts ...

随机推荐

  1. [P1396]营救 (并查集)

    大佬都是用最短路做的 我用最小生成树 #include<bits/stdc++.h> #include<algorithm> using namespace std; stru ...

  2. 天天爱跑步 [NOIP2016]

    Description 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务.这个游戏的地图可 ...

  3. 华容道 [NOIP 2013]

    Describltion 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...

  4. docker 报错: Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

    centos 启动docker服务报错: Job for docker.service failed because the control process exited with error cod ...

  5. JS_高程3.基本概念(4)操作符

    ECMA-262用于操作数据值的操作符包括: 算术操作符 位操作符 关系操作符 相等操作符 ECMAScript操作符的不同之处在于:它能够适用于很多值,包括字符串,数字值,布尔值,甚至是对象.(在应 ...

  6. Deepin 15.4 破解安装 SecureFX-7.3 失败

    参考先前的文章(Ubuntu 14 安装并破解SSH工具 SecureCRT),破解安装 SecureCRT-7.3  成功,但是破解安装 SecureFX-7.3 时就一直报错: Insuffici ...

  7. 06、action操作开发实战

    1.reduce: 2.collect: 3.count: 4.take: 5.saveAsTextFile: 6.countByKey: 7.foreach: package sparkcore.j ...

  8. MySQL出现Access denied for user ‘root’@’localhost’ (using password:YES)

    连接时MySQL出现了下面的错误: Access denied for user ‘root’@’localhost’ (using password:YES) 解决的办法是先停止MySQL服务,在m ...

  9. web安全测试---AppScan扫描工具

    安全测试应该是测试中非常重要的一部分,但他常常最容易被忽视掉. 尽管国内经常出现各种安全事件,但没有真正的引起人们的注意.不管是开发还是测试都不太关注产品的安全.当然,这也不能怪我们苦B的“民工兄 弟 ...

  10. Mac Node.js 配置

    1.Node.js 简介 Node.js® 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,可方便地构建快速,可扩展的网络应用程序的平台.Node.js 使用事件驱动,非阻塞式 ...