ARG:定义构建镜像时须要的参数、用户能够在构建期间经过docker build --build-arg <varname>=<value>将其传递给构建器、若是指定了dockerfile中没有定义的参数,则发发出警告,提示构建参数未被使用docker
语法形式: ARG <name>[=<default value>]ubuntu
一个dockerfile中能够包含多个ARG参数缓存
注意:不推荐在构建期间使用ARG传递密码、我的认证之类的信息,由于任何人均可以经过docker history查看到构建期间传递的变量值ui
若是ARG指令有默认值而且在构建期间没有接收到参数、则使用默认值spa
ARG变量定义从Dockerfile中定义的行开始生效,而不是在命令行或其余地方使用参数开始生效命令行
在ARG指令定义变量以前、任何对该变量的引用返回的结果都是一个空字符串字符串
一个ARG指令的有效范围在其定义的构建阶段内、若是要在多个阶段中都有效、则必须在每一个阶段都饮食ARG指令。以下:dockerfile
ARG变量使用:class
可使用ARG或ENV指令来指定RUN指令可用的变量,若是ARG和ENV同时指定了一个相同名称的变量、则ENV设置的变量会覆盖ARG设置的变量。以下:变量
使用 docker build --build-arg CONT_IMG_VER=v2.0.1 .
最终输出v1.0.0
实例2(接上例) :
此处输出v1.0.0 由于上例中ENV设置了其默认值为v1.0.0、因而可知,与ARG不一样 ENV设置参数的有效期为整个构建期内
所以 咱们能够从命令行传递参数、并经过ENV指令将其保存在最终镜像中
预约义ARG:docker自身定义了一个ARG变量,此类变量不须要经过在dockerfile文件中执行ARG指令便可使用、以下:
这些变量可直接经过--build-arg <varname>=<vaue>传递
注:预约义变量不能经过docker history输出,这是为了减小在HTTP_PROXY变量中意外泄漏敏感身份验证信息的风险
待添加:对构建缓存的影响