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變量使用:變量
可使用ARG或ENV指令來指定RUN指令可用的變量,若是ARG和ENV同時指定了一個相同名稱的變量、則ENV設置的變量會覆蓋ARG設置的變量。以下:ftp
使用 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變量中意外泄漏敏感身份驗證信息的風險
待添加:對構建緩存的影響