从 docker 到 runC

前端之家收集整理的这篇文章主要介绍了从 docker 到 runC前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

》和《》中分别介绍了 runC 和 containerd。本文我们将结合 docker 中的其它组件探索 docker 是如何把这些组件组织起来协调工作的。

用户的请求发送给 docker daemon(dockerd)。该程序的安装路径为:

/usr/bin/

/usr/bin/

》。该程序的安装路径为:

/usr/bin/

/usr/bin/

》。该程序的安装路径为:

/usr/bin/

$ docker run hello-world

输出信息指出,hello-world 容器的运行经历了如下四步:

  1. 输出
  2. 输出的内容发送给了 docker 客户端

(REST)的方式对外提供服务,Engine API 里描述了 dockerd 支持的所有请求。Docker 客户端与 dockerd 之间就是通过 REST 的方式通信的。在 ubuntu 16.04 中,dockerd 默认是不监听 tcp 端口的,为了方便演示,我们让 dockerd 监听 tcp 端口。这样就可以使用 curl 代替 docker 客户端向 dockerd 发送请求了。具体的操作为,先

#

$ systemctl daemon- systemctl restart docker.service

$ curl -X POST

来完成了。Dockerd 与 docker-containerd 之间是通过 grpc 协议通信的。当 docker-containerd 收到 dockerd 启动容器的请求之后,会做一些初始化工作,然后启动 进程,并将相关配置作为参数传给它。docker-containerd 负责管理所有本机正在运行的容器,而一个 docker-containerd-shim 进程只负责管理一个运行的容器,它相当于 的一个封装,充当 docker-containerd 和 docker-runc 之间的桥梁,docker-runc 能干的就交给 docker-runc 来做,docker-runc 做不了的就放到这里来做。下面我们用 ubuntu 镜像运行一个容器:

$ docker run - ubuntu bash

------------

可以看到对 containerd-shim 的一些解释。

》和《》中分别介绍了 runC 和 containerd 等 docker 的核心组件。本文则通过 demo 演示了在创建、运行容器的过程中这些组件如何配合 docker engine 完成相关的任务,以及相关进程之间的关系和作用。希望本文可以帮助大家理解 docker 的整体架构及其组件间的协作方式。

猜你在找的Docker相关文章