根据命令的输出重建docker镜像

时间:2018-04-18 08:58:00

标签: docker caching composition

假设我想在某个存储库中有新的编译器版本时重建我的docker镜像。

我可以在容器中收集版本:

FROM centos:7
RUN yum info gcc | grep Version | sort | tail -1 | cut -d: -f2 | tr -d ' '

如果我构建此容器并将其标记为base,我可以使用该信息并设置第二个容器:

FROM base
RUN yum install gcc-4.8.5

当编译器版本未更改时,Docker将能够缓存第二个容器而不重建它。但是创建它需要一些shell脚本,并且可能很脆弱,例如,持续集成场景。

我想要做的是为这两个容器引入统一的来源。有没有办法写这样的东西:

FROM centos:7
$GCC_VERSION=RUN yum info gcc | grep Version | sort | tail -1 | cut -d: -f2 | tr -d ' '
RUN yum install gcc-$GCC_VERSION

并在docker build

期间扩展了变量(并且命令仍然被缓存)

1 个答案:

答案 0 :(得分:1)

您可以使用ARG指令。构建args以您希望的方式影响缓存:Impact on build caching

使用这样的Dockerfile:

FROM centos:7
ARG GCC_VERSION
RUN yum install -y gcc-$GCC_VERSION

只有在GCC_VERSION发生变化时才会重建图像。

docker build --build-arg GCC_VERSION=$(docker run centos:7 yum info gcc | grep Version | sort | tail -1 | cut -d: -f2 | tr -d ' ') .