Docker 优化构建过程

Docker 构建流程可以而且应该得到优化。这将消除软件开发生命周期中的大量摩擦。

许多 Docker 初学者在制作第一个 Docker 文件时都会犯以下错误:

您能找出这个典型的 Node.js 应用程序的 Dockerfile 的不足吗? 

     首先,我们需要知道映像由一系列层组成。除了带有 CMD 和 ENTRYPOINT 关键字的行之外,Dockerfile 中的每一行(逻辑)都会创建一个层。此外,Docker 构建器会尽力缓存图层,如果它们在后续构建过程中没有变化,就会重复使用。但是,缓存只能使用第一次更改层之前的缓存层。所有后续层都需要重新构建。也就是说,前面的 Dockerfile 结构会使镜像层缓存失效,或者就像我们经常听到的那样,会破坏镜像层缓存!

       根据经验,您肯定知道,在具有许多外部依赖关系的典型 Node 应用程序中,npm install 命令是一项相当昂贵的操作。执行该命令可能需要数秒到数分钟不等。也就是说,每次源文件发生变化(我们知道这在开发过程中经常发生),Dockerfile 中的第 3 行都会导致相应的映像层发生变化。因此,Docker 构建器无法重用缓存中的这一层,也无法重用 RUN npm install 创建的后续层。代码中的任何细微改动都会导致 npm install 重新运行。这是可以避免的。包含外部依赖关系列表的 package.json 文件很少发生变化。有了这些信息,我们来修复 Dockerfile:

     这次,在第 3 行,我们只将 package.json 文件复制到容器中,而该文件很少发生变化。因此,随后的 npm install 命令同样很少执行。第 5 行的 COPY 命令是一个非常快速的操作,因此在某些代码发生变化后重建映像时,只需重建最后一层即可。构建时间将缩短到几分之一秒。

   这一原则同样适用于大多数语言或框架,如 Python、.NET 或 Java。避免破坏镜像层缓存!

以上案例,对于docker的基础命令不再解释,不熟悉的可以看我的docker实战课,地址:Docker 实战_在线视频教程-CSDN程序员研修院

如果文章对你有意义,请关注我的公众号,每天都会更新技术文章:                                              

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

面朝大海,春不暖,花不开

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值