dockerfile深刻学习之ARG

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

  • FROM busybox
  • ARG SETTINGS
  • RUN ./run/setup $SETTINGS
  • FROM busybox
  • ARG SETTINGS
  • RUN ./run/other $SETTINGS

 ARG变量使用:变量

可使用ARG或ENV指令来指定RUN指令可用的变量,若是ARG和ENV同时指定了一个相同名称的变量、则ENV设置的变量会覆盖ARG设置的变量。以下:ftp

  • 1 FROM ubuntu
  • 2 ARG CONT_IMG_VER
  • 3 ENV CONT_IMG_VER v1.0.0
  • 4 RUN echo $CONT_IMG_VER

使用 docker build --build-arg CONT_IMG_VER=v2.0.1 .

最终输出v1.0.0 

实例2(接上例) :

  • 1 FROM ubuntu
  • 2 ARG CONT_IMG_VER
  • 3 ENV CONT_IMG_VER ${CONT_IMG_VER:-v1.0.0}
  • 4 RUN echo $CONT_IMG_VER

 此处输出v1.0.0  由于上例中ENV设置了其默认值为v1.0.0、因而可知,与ARG不一样  ENV设置参数的有效期为整个构建期内

所以 咱们能够从命令行传递参数、并经过ENV指令将其保存在最终镜像中

预约义ARG:docker自身定义了一个ARG变量,此类变量不须要经过在dockerfile文件中执行ARG指令便可使用、以下:

  • HTTP_PROXY
  • http_proxy
  • HTTPS_PROXY
  • https_proxy
  • FTP_PROXY
  • ftp_proxy
  • NO_PROXY
  • no_proxy

这些变量可直接经过--build-arg <varname>=<vaue>传递

注:预约义变量不能经过docker history输出,这是为了减小在HTTP_PROXY变量中意外泄漏敏感身份验证信息的风险

待添加:对构建缓存的影响

相关文章
相关标签/搜索