如何加速ingress-nginx镜像的docker构建过程以修复nginx安全漏洞
ingress-nginx 镜像编译构建提速方案(无需大幅修改原 Dockerfile)
方案1:通过 MAKEFLAGS 环境变量注入并行编译参数
GNU Make 会默认读取环境变量 MAKEFLAGS 内的全局配置,无需修改原 Dockerfile 中的 make 命令,即可注入多线程编译参数:
- 先开启 Docker BuildKit 提升构建整体效率(Docker 18.09+ 版本默认支持):
export DOCKER_BUILDKIT=1
- 构建时通过
--build-arg传递多线程参数,可直接用当前设备全部CPU核心执行编译:
docker build -t 自定义镜像名:标签 \ --build-arg MAKEFLAGS="-j$(nproc)" \ .
若使用低版本 Docker 无法识别未预声明的构建参数,仅需在原 Dockerfile 最开头添加一行
ARG MAKEFLAGS即可,无其他侵入性修改。
方案2:挂载编译缓存实现多次构建提速
如果需要频繁调整代码迭代构建,可添加构建缓存挂载参数,复用之前的编译中间产物,避免每次从零开始执行编译流程:
docker build -t 自定义镜像名:标签 \ --build-arg MAKEFLAGS="-j$(nproc)" \ --mount type=cache,target=/tmp/nginx-build \ .
上述命令中的target路径需对应原 Dockerfile 中 Nginx 源码的编译工作目录。
方案3:最快方案:外置编译直接替换二进制
完全跳过镜像内部编译流程,本地提前编译好修复漏洞后的 Nginx 二进制文件,再基于官方原有镜像做极小化构建,全程仅需数秒:
- 在本地环境编译适配镜像系统架构的 Nginx 二进制
- 编写极简 Dockerfile:
FROM registry.k8s.io/ingress-nginx/controller:v1.x.x # 替换为你使用的官方基础镜像版本 COPY ./本地编译好的nginx路径 /usr/sbin/nginx # 如有其他关联依赖库也可在此处一并复制
- 执行构建即可:
docker build -t 自定义镜像名:标签 .
内容的提问来源于stack exchange,提问作者auggie321
相关产品推荐
相关产品推荐

