博客
关于我
docker进程分析
阅读量:80 次
发布时间:2019-02-26

本文共 1510 字,大约阅读时间需要 5 分钟。

Docker 进程分析

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

容器相关的进程

安装容器的时候,一句话就够了,yum -y install docker-ce,前提是配置好 Docker 的 yum 源。不过有时候配置好了源,总是会发现 timeout,呵呵哒!尝试下阿里云的 yum 源。

Docker 组件解析

安装完成后,就会发现如上的文件,除去了相关的帮助文档。在其中可以看到,分为各种各样的二进制程序:

  • docker:表示为 Docker 的客户端,一个命令行程序的使用。
  • dockerd:主要是服务端程序,在默认的情况下,客户端发送的请求都是由 dockerd 接收,而 dockerd 则是一个 RESTful 的 API 接口。
  • docker-containerd:可以看出来包括三部分:
    • 客户端名称为 ctr,一个是 containerd 用来提供 gRPC 的接口,主要用来进行容器的管理、镜像的管理、存储和网络的管理。
    • containerd-shim:主要是用来运行容器的进程。
  • docker-runc:容器的运行时,用于创建、启动、停止、删除操作。
  • docker-proxy:主要是来实现网络转发功能。
  • docker-init:初始化网络,生成相关的文件。

Docker 服务启动

启动 Docker 服务如下:

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

容器的根目录

容器的根目录主要用来存放一些镜像、网络配置、编译 image 的缓存、运行时环境、挂载的卷等元数据信息。

容器进程信息

在没有启动容器的时候,进程信息如下所示:

运行一个容器之后,进程信息如下所示:

进程与线程

从进程的 id 可以看出来,dockerd 生成了 docker-containerd,docker-containerd 生成了 docker-containerd-shim,那么 docker-runc 去哪里了?

docker-runc 的作用

  • docker-runc 是容器的运行时,专门用来做容器的创建、启动、停止、删除操作。当每次执行完毕之后,就会退出。

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

  • docker-containerd 主要是用来负责容器生命周期的管理、镜像、存储、网络的管理,这个开放了一个 gRPC 的接口,从而可以适配很多平台,上层可以直接调用,而 dockerd 则是一个具体的实现,其他还有 lxd 等。

  • dockerd 主要是服务端程序,提供了 RESTful 接口,可以使用 curl 直接访问。

  • Docker 远程访问

    支持远程访问的时候,需要修改启动参数:

    查看运行时环境:

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

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

    闲扯

    当分析完这个进程之后,陷入了深深的沉思。。。分析这些进程有个毛的用。。。

    从标准化的指定上来说,无论 runc 的标准话还是 image 的标准化,总体的目标是弱依赖,只要提供相应的接口就可以提供服务,只要符合标准,那么就是可以运行的。

    转载地址:http://igyk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现Dijkstra最小路径算法(附完整源码)
    查看>>
    Objective-C实现dijkstra迪杰斯特拉算法(附完整源码)
    查看>>
    Objective-C实现dijkstra迪杰斯特拉算法(附完整源码)
    查看>>
    Objective-C实现Dijkstra迪杰斯特拉算法(附完整源码)
    查看>>
    Objective-C实现dijkstra银行家算法(附完整源码)
    查看>>
    Objective-C实现Dinic算法(附完整源码)
    查看>>
    Objective-C实现disjoint set不相交集算法(附完整源码)
    查看>>
    Objective-C实现DisjointSet并查集的算法(附完整源码)
    查看>>
    Objective-C实现djb2哈希算法(附完整源码)
    查看>>
    Objective-C实现DNF排序算法(附完整源码)
    查看>>
    Objective-C实现doomsday末日算法(附完整源码)
    查看>>
    Objective-C实现double factorial iterative双阶乘迭代算法(附完整源码)
    查看>>
    Objective-C实现double factorial recursive双阶乘递归算法(附完整源码)
    查看>>
    Objective-C实现double hash双哈希算法(附完整源码)
    查看>>
    Objective-C实现double linear search recursion双线性搜索递归算法(附完整源码)
    查看>>
    Objective-C实现double linear search 双线性搜索算法(附完整源码)
    查看>>
    Objective-C实现double sort双重排序算法(附完整源码)
    查看>>
    Objective-C实现DoublyLinkedList双链表的算法(附完整源码)
    查看>>
    Objective-C实现DoublyLinkedList双链表算法(附完整源码)
    查看>>
    Objective-C实现DPLL(davisb putnamb logemannb loveland)算法(附完整源码)
    查看>>