假设我想在某个存储库中有新的编译器版本时重建我的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
?
答案 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 ' ') .