基于命令输出重建Docker镜像:编译器版本更新触发构建
实现编译器版本更新时自动重建Docker镜像的方案
我来分享一个实用的方法,能让你在仓库推出新版本编译器时自动触发Docker镜像的重建,核心是利用Docker的构建缓存特性——只有当基础镜像的内容发生变化时,才会重新构建后续的镜像层:
第一步:创建获取最新编译器版本的基础镜像
首先写一个用来检测最新编译器版本的Dockerfile,它的作用是拉取仓库里的最新版本信息,一旦版本更新,这个镜像的构建层就会变化,打破缓存:
FROM centos:7 RUN yum info gcc | grep Version | sort | tail -1 | cut -d: -f2 | tr -d ' '
这个命令会从CentOS的软件仓库中提取GCC的最新版本号,输出一个干净的版本字符串。每次构建这个镜像时,都会重新查询仓库的最新状态,确保版本信息是最新的。
第二步:构建并标记基础镜像
执行下面的命令构建这个基础镜像,并标记为base:
docker build -t base .
第三步:创建业务镜像的Dockerfile
接下来基于刚才的base镜像编写业务镜像的Dockerfile,这样只有当base镜像因为编译器版本更新而重建时,才会触发这个镜像的重新构建:
FROM base RUN yum install gcc-4.8.5
- 如果编译器版本没有变化,Docker会发现
base镜像的构建层没有改动,直接使用缓存,不会重新执行yum install步骤,节省构建时间。 - 如果仓库里的编译器版本更新了,
base镜像的构建层会因为版本号输出变化而重新生成,Docker就会跳过缓存,重新执行后续的安装命令(如果需要安装最新版本,这里可以把gcc-4.8.5改成gcc)。
小提示
如果担心yum的仓库缓存过时,导致获取的版本信息不是最新的,可以在基础镜像的RUN命令前加上清理和更新缓存的操作:
FROM centos:7 RUN yum clean all && yum makecache && yum info gcc | grep Version | sort | tail -1 | cut -d: -f2 | tr -d ' '
内容的提问来源于stack exchange,提问作者choeger
相关产品推荐
相关产品推荐

