Docker run执行流详解(以volume,network和libcontainer为线索)

通常我们都习惯了使用Docker run来执行一个Docker容器,那么在我们执行Docker run之后,Docker到底都做了什么工作呢?本文通过追踪Docker run(Docker 1.9版本)的执行流程,借由对volume,network和libcontainer的使用和配置的介绍,对Docker run的原理进行了详细解读。

首先,用户通过Docker client输入docker run来创建被运行一个容器。Docker client主要的工作是通过解析用户所提供的一系列参数后,分别发送了这样两条请求:

"POST", "/containers/create?"+containerValues
"POST", "/containers/"+createResponse.ID

这样client的工作也就完成了,很显然client做的事情很少,主要是负责给Docker daemon发送请求。不过,通过client所发送的两条请求,我们可以很自然的把docker run的整个执行过程分成create与start两个阶段。下图对docker run中各个关键事件的发生时间点分别进行了标注。下面我将分别从这个两个阶段并结合下图,对docker run的执行流程进行介绍。

图 1 各事件发生的时间点

1 Create阶段

这阶段Docker daemon的主要工作是对client提交的POST表单进行分析整理,获得具有可移植性的配置参数结构体config和不可移植的配置结构体hostconfig。然后daemon会调用daemon.newContainer函数来创建一个基本的container对象,并将config和hostconfig中保存的信息填写到container对象中。当然此时的container对象并不是一个具体的物理容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值