docker build源码分析

本文主要分析了Docker build的执行流程,从Docker Client接收命令开始,经过Docker Server的路由转发,到Docker Daemon的处理,包括构建选项设置、用户认证、Dockerfile解析及指令执行等步骤。重点探讨了run()函数中的container创建、运行和提交新镜像的过程。
摘要由CSDN通过智能技术生成

前言:

最近在搞Docker,需要仔细的去了解Docker源码,在网上找来找去都是旧版本的,很头疼,看了众多的有关博客和《docker源码分析》,总结一下。源码基于docker-ce17.9.0(docker-ce17.9.0(目前网上没有这个版本的),我主要是需要docker build跟docker run的流程,大致差不多,先将build流程码出。

简单了解 docker build 的作用:

用户可以通过一个 自定义的 Dockerfile 文件以及相关内容,从一个基础镜像起步,对于 Dockerfile 中的每一 条命令,都在原先的镜像 layer 之上再额外构建一个新的镜像 layer ,直至构建出用户所需 的镜像。 

由于 docker build 命令由 Docker 用户发起,故 docker build 的流程会贯穿 Docker Client Docker Server 以及 Docker Daemon 这三个重要的 Docker 模块。所以咱也是以这三个 Docker 模块为主题,分析 docker build 命令的执行,其中 Docker Daemon 最为重要。

1、Docker Client 作为用户请求的人口,自然第一个接收并处理 docker build 命令。主要包括:定义并解析flag参数、获取Dockerfile相关内容。

流程:

   runBuild()函数只是从Client解析docker build命令和参数,对于我不怎么需要,先不分析。(点击runBuild可以跳转到代码)

2、docker server 负责根据请求类型以及请求的 URL ,路由转发 Docker 请求至相应的处理方法。在处理方法中, Docker Server 会创建相应的 Job ,为 Job 置相应的执行参数并触发该 Job 的运行。在此,将参数信息配置到JSON数据中。

其中,initRouter 将build命令的路由器初始化,initRouter.NewRouter.initRoutes.NewPostRoute.

NewPostRoute()调用 postBuild()函数

3、通过参数信息配置(newImageBuildOptions) 构建选项数据(buildOption)

      getAuthConfig()请求header名为X-Registry-Config,值为用户的config信息(用户认证信息)

4、配置好选项数据,将其作为参数,调用imgID:= br.backend.Build()

5、return newBuilder(ctx, builderOptions).build(source, dockerfile)

     newBuilder()从可选的dockerfile和options创建一个新的Dockerfile构建器

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值