Using ARG Variables(使用ARG变量)

我们可以使用ARGENV指令来指定RUN指令可用的变量。使用ENV指令定义的环境变量始终覆盖同名ARG指令。思考下面这个DockerfileENVARG指令

FROM ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER=v1.0.0
RUN echo $CONT_IMG_VER

假设这个镜像通过下面这个命令构建:

$ docker build --build-arg CONT_IMG_VER=v2.0.1 .

在这种情况下,RUN指令使用值v1.0.0而不是ARG设置的由用户传递的值v2.0.1。这种行为类似于shell脚本,从定义一个本地作用域变量的地方开始,它会覆盖作为参数传递的变量或者从环境中继承的变量。

使用上面的例子,但不同的ENV定义,我们可以在ARGENV指令之间创建更有用的交互:

FROM ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER=${CONT_IMG_VER:-v1.0.0}
RUN echo $CONT_IMG_VER

ARG指令不同,ENV值总是会保存在构建的镜像中。思考下面不带--build-arg选项标志的示例:

$ docker build .

在上面的示例中,CONT_IMG_VER仍然保存在镜像中,但是它的值为v1.0.0。因为第三行的ENV指令为它设置了一个默认值。

本示例中的变量扩展技术允许我们通过命令行中的参数,并通过ENV指令将它们保存在到最终的镜像中。但是变量扩展仅支持有限的Dockerfile指令集

Last updated