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變量中意外泄漏敏感身份驗證信息的風險

待添加:對構建緩存的影響

相關文章
相關標籤/搜索