Docker镜像构建原理解析(不装docker也能构建镜像)
在devops流程里面 构建镜像是一个非常重要的过程,一般构建镜像是写dockerfile文件然后通过docker client来构建的image。
docker client 会先检查本地有没有image,如果没有帮你 从镜像仓库 pull 下来
然后解析你写的dockerfile构建新的image。
本文带你了解
- pull 命令 背后是怎么做的?
- build 命令 背后是怎么做的?
下篇文章带你解析:
如果我不用docker 我如何构建一个镜像?
我们以微软的aspnet2.2为基础构建一个aspnetcore项目的镜像为例子
mcr.microsoft.com/dotnet/core/aspnet:2.2
根据基础镜像registry去获取mainfest信息
获取到的内容如下:
mainfest文件里面都是摘要(digest)记录
- config信息摘要
- 每个layer的摘要 (上面的例子有4个)
根据上面的config信息摘要获取config详情
根据diff_ids里面去下载对应layers
下载完后对比摘要一致,确保镜像文件合法性
路径规则:
https://mcr.microsoft.com/v2/dotnet/core/aspnet/blobs/sha256:xxxxxx
构建我们的镜像
在基础镜像的配置基础上加入我们的自定义配置
- entrypoint
- cmd
- ports
- environment
- imageworkingdirectory
- volumes
- labels
在基础镜像的所有的layers把我们要打包到镜像也做成一个layer
生成的镜像tar包解压出来
多了一个 tar.gz文件,解压之后 就是我们打包放进去的文件
- 原来基础镜像有4个layer 加上我们的 共5个
- config.json
- manifest.json
config.json对比与基础镜像
我们来复习下构建镜像的过程 根据镜像名称拉取mainfest
- 根据mainfest拉取config
- 根据config拉取layers
- 下载各个layer
- 修改到基础镜像的配置(config.json和mainfest.json)
- 加入我们要加入的文件layer
知道原理后我们可以自己写一个工具来实现整个过程
支持以下镜像仓库作为基础镜像构建
- docker hub
- aliyun
- 腾讯云
到此这篇关于docker镜像构建原理解析(不装docker也能构建镜像)的文章就介绍到这了,更多相关docker镜像构建内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: 86款国产游戏版号下发:《斗罗大陆:魂师对决》过审
下一篇: MySQL InnoDB 锁的相关总结