欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Docker镜像构建原理解析(不装docker也能构建镜像)

程序员文章站 2022-09-06 17:51:21
在devops流程里面 构建镜像是一个非常重要的过程,一般构建镜像是写dockerfile文件然后通过docker client来构建的image。docker client 会先检查本地有没有ima...

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信息

Docker镜像构建原理解析(不装docker也能构建镜像)

获取到的内容如下:

mainfest文件里面都是摘要(digest)记录

  • config信息摘要
  • 每个layer的摘要 (上面的例子有4个)

根据上面的config信息摘要获取config详情

Docker镜像构建原理解析(不装docker也能构建镜像)

根据diff_ids里面去下载对应layers

下载完后对比摘要一致,确保镜像文件合法性

路径规则:

https://mcr.microsoft.com/v2/dotnet/core/aspnet/blobs/sha256:xxxxxx

Docker镜像构建原理解析(不装docker也能构建镜像)

Docker镜像构建原理解析(不装docker也能构建镜像)

Docker镜像构建原理解析(不装docker也能构建镜像)

Docker镜像构建原理解析(不装docker也能构建镜像)

构建我们的镜像

在基础镜像的配置基础上加入我们的自定义配置

  • entrypoint
  • cmd
  • ports
  • environment
  • imageworkingdirectory
  • volumes
  • labels

在基础镜像的所有的layers把我们要打包到镜像也做成一个layer

生成的镜像tar包解压出来

Docker镜像构建原理解析(不装docker也能构建镜像)

多了一个 tar.gz文件,解压之后 就是我们打包放进去的文件

Docker镜像构建原理解析(不装docker也能构建镜像)

  • 原来基础镜像有4个layer 加上我们的 共5个
  • config.json
  • manifest.json

Docker镜像构建原理解析(不装docker也能构建镜像)

config.json对比与基础镜像

Docker镜像构建原理解析(不装docker也能构建镜像) 

我们来复习下构建镜像的过程 根据镜像名称拉取mainfest

  • 根据mainfest拉取config
  • 根据config拉取layers
  • 下载各个layer
  • 修改到基础镜像的配置(config.json和mainfest.json)
  • 加入我们要加入的文件layer

知道原理后我们可以自己写一个工具来实现整个过程

支持以下镜像仓库作为基础镜像构建

  • docker hub
  • aliyun
  • 腾讯云

到此这篇关于docker镜像构建原理解析(不装docker也能构建镜像)的文章就介绍到这了,更多相关docker镜像构建内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关标签: Docker 镜像