持续交付 36 讲
王潇俊
携程系统研发部总监
39682 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
开篇词 (1讲)
结束语 (1讲)
持续交付 36 讲
15
15
1.0x
00:00/00:00
登录|注册

17 | 容器镜像构建的那些事儿

思考题
镜像构建环境
镜像构建优化
什么是Dockerfile?
什么是容器镜像?
容器镜像构建

该思维导图由 AI 生成,仅供参考

随着容器发布越来越流行,持续交付最后一公里的产物,逐渐由之前的代码包变成了容器镜像。然而,容器镜像构建与传统的代码构建有很多不同之处,也增加了很多新鲜的技术领域和内容需要我们去学习。
所以,今天我们就一起来聊聊容器镜像构建的那些事儿,打通容器镜像构建的各个环节。

什么是容器镜像?

在虚拟机时代就有镜像的说法,当我们创建一个虚拟机时,通常会去网上下载一个 ISO 格式的虚拟机镜像,然后经过 VirtualBox 或者 VMware 加载,最终形成一个包含完整操作系统的虚拟机实例。
而容器镜像也是类似的意思,只不过它不像虚拟机镜像那么庞大和完整,它是一个只读的模板,一个独立的文件系统,包含了容器运行初始化时所需要的数据和软件,可以重复创建出多个一模一样的容器。
容器镜像可以是一个完整的 Ubuntu 系统,也可以是一个仅仅能运行一个 sleep 进程的独立环境,大到几 G 小到几 M。而且 Docker 的镜像是分层的,它由一层一层的文件系统组成,这种层级的文件系统被称为 UnionFS。下图就是一个 Ubuntu 15.04 的镜像结构。
图中的镜像部分画了一个锁的标记,它表示镜像中的每一层都是只读的,只有创建容器时才会在最上层添加一个叫作 Container layer 的可写层。容器运行后的所有修改都是在这个可写层进行,而不会影响容器镜像本身。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了容器镜像构建的重要性和基本概念,以及Dockerfile的作用和优化方法。容器镜像是一个只读的模板,可以重复创建出多个一模一样的容器,而Docker的镜像是分层的,由一层一层的文件系统组成。Dockerfile通过文本格式的配置文件描述镜像,可以通过运行docker build将这些指令转化为镜像。文章还介绍了镜像构建的优化方法,包括选择合适的Base镜像、减少不必要的镜像层的产生以及充分利用指令的缓存。此外,还介绍了两种用容器构建容器镜像的方式:Docker Out Of Docker(DooD)和Docker In Docker(DinD)。通过本文的介绍,读者可以快速了解容器镜像构建的基本概念和关键步骤,以及如何优化镜像构建过程。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《持续交付 36 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • knightray
    请教一个问题。如果使用Jenkins pipeline + Docker的方式,这是否意味着每次测试环境的构建都需要生成镜像?如果是传统的构建方式,只需要编译生成jar/war包就可以了,现在加上生成镜像这一步,构建耗时增加了不少。请问这有没有更好的解决办法?

    作者回复: 其实不会增加很多时间的,文章中也解释了,docker的原理是分层的文件系统。一般我们是在基础镜像之上做的发布镜像。下载也是下载的差异那层。差异那部分就是代码和一些配置,以java来说最多百兆吧,携程应用的镜像时间最多的也就分钟内吧

    2018-09-11
    4
  • 暴风
    之前说错了,不是kibana,是kaniko。这俩名字容易搞混
    2018-08-13
    4
  • 雅各布
    千万别去碰dind, 绝对是个坑
    2024-01-04归属地:福建
  • 箫潇
    2. ADD 命令与 COPY 命令:Dockerfile 没有发生任何改变,但是命令ADD run.sh / 中 Dockerfile 当前目录下的 run.sh 却发生了变化,从而将直接导致镜像层文件系统内容的更新,原则上不应该再使用 cache。那么,判断 ADD 命令或者 COPY 命令后紧接的文件是否发生变化,则成为是否延用 cache 的重要依据。Docker 采取的策略是:获取 Dockerfile 下内容(包括文件的部分 inode 信息),计算出一个唯一的 hash 值,若 hash 值未发生变化,则可以认为文件内容没有发生变化,可以使用 cache 机制;反之亦然。
    2021-05-17
  • 戴斌
    Docker镜像的版本效果适合后续的维护,减少系统配置、系统环境依赖等无版本控制的风险
    2020-03-22
  • 暴风
    对于第一个问题,还可以用谷歌出的kibana
    2018-08-11
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部