Docker 运行流程
2021-04-09 18:23:46 1 举报
Docker 运行流程
作者其他创作
大纲/内容
(1)
(5)
(12)
Driver
(3)
http server
(4)
(15)
networkinterface
namespaces
GraphDB
Docker Server
(16)
(1) Docker Client接受docker run命令,解析完请求以及收集完请求参数之后,发送一个HTTP请求给Docker Server,HTTP请求方法为POST,请求URL为”/containers/create? “+”xxx”;(2) Docker Server接受以上HTTP请求,并交给mux.Router,mux.Router通过URL以及请求方法来确定执行该请求的具体handler;(3) mux.Router将请求路由分发至相应的handler,具体为PostContainersCreate;(4) 在PostImageCreate这个handler之中,一个名为”create”的job被创建,并开始让该job运行;(5) 名为”create”的job在运行过程中,执行Container.Create操作,该操作需要获取容器镜像来为Docker容器创建rootfs,即调用graphdriver;(6) graphdriver从Graph中获取创建Docker容器rootfs所需要的所有的镜像;(7) graphdriver将rootfs所有镜像,加载安装至Docker容器指定的文件目录下;(8) 若以上操作全部正常执行,没有返回错误或异常,则Docker Client收到Docker Server返回状态之后,发起第二次HTTP请求。请求方法为”POST”,请求URL为”/containers/”+container_ID+”/start”;(9) Docker Server接受以上HTTP请求,并交给mux.Router,mux.Router通过URL以及请求方法来确定执行该请求的具体handler;(10) mux.Router将请求路由分发至相应的handler,具体为PostContainersStart;(11) 在PostContainersStart这个handler之中,名为”start”的job被创建,并开始执行;(12) 名为”start”的job执行完初步的配置工作后,开始配置与创建网络环境,调用networkdriver;(13) networkdriver需要为指定的Docker容器创建网络接口设备,并为其分配IP,port,以及设置防火墙规则,相应的操作转交至libcontainer中的netlink包来完成;(14) netlink完成Docker容器的网络环境配置与创建;(15) 返回至名为”start”的job,执行完一些辅助性操作后,job开始执行用户指令,调用execdriver;(16) execdriver被调用,初始化Docker容器内部的运行环境,如命名空间,资源控制与隔离,以及用户命令的执行,相应的操作转交至libcontainer来完成;(17) libcontainer被调用,完成Docker容器内部的运行环境初始化,并最终执行用户要求启动的命令。
graphdriver
port
(6)
Docker Client
execdriver
DockerDeamon
(17)
PostContainerStart
(13)
(2)
Docker container
create
(7)
Job
Engine
DockerRegistry
Respository(images)
IP
router
.........
PostContainerCreate
rootf(layered)
netlink
start
(14)
devices
libcontainer
aufs
(8)
cgroups
(9)
networkdriver
(10)
(11)
native
appmarmor
bridge
Graph
0 条评论
回复 删除
下一页