使用依赖镜像优化docker构建流程
原流程
构建应用程序镜像时安装依赖,例如:
Dockerfile:
1 |
|
优点:
- 流程简单,仅需维护 package.json 文件,不需要其他人为操作
缺点:
- 每次构建都需要重新装包,增加构建时长。
- 依赖版本不确定,存在部分依赖自动升级的情况,极端情况下可能会出现 bug(除非上传 package-lock 文件)
优化流程
利用构建引用镜像前先构建依赖镜像,例如:
Dockerfile-dependencies:
1 |
|
先用构建一个基础依赖镜像,并提供 package.json 安装引用程序所需要的依赖。
该镜像会被上传至镜像仓库中,当我们构建应用程序镜像时,可直接作为基础镜像使用,不需要再次安装依赖。
同时在构建应用后再次检测安装的依赖和需求的依赖是否一致,保证服务能够正常运行。
Dockerfile:
1 |
|
优点:
- 只要服务端依赖没有变化,同一个镜像可以被反复使用,节约了大量的构建时间。
- 依赖包版本固定,不会因为装包失败或者升级导致程序异常
构建性能对比
指标 | 原方案 | 优化方案 | 依赖构建时间 |
---|---|---|---|
应用程序+docker 镜像构建时间 | 2m40s | 1m30s |
目前该博客的构建方式就是采用这种方式,并且通过判断 master 分支上修改的文件类型自动识别是否需要重新构建依赖镜像。
使用依赖镜像优化docker构建流程
https://www.wobushi.top/2021/使用依赖镜像优化docker构建流程/