dockerfile深入學習之ARG


ARG:定義構建鏡像時需要的參數、用戶可以在構建期間通過docker build --build-arg <varname>=<value>將其傳遞給構建器、如果指定了dockerfile中沒有定義的參數,則發發出警告,提示構建參數未被使用

語法形式: ARG <name>[=<default value>]

一個dockerfile中可以包含多個ARG參數

注意:不推薦在構建期間使用ARG傳遞密碼、個人認證之類的信息,因為任何人都可以通過docker history查看到構建期間傳遞的變量值

如果ARG指令有默認值並且在構建期間沒有接收到參數、則使用默認值

ARG變量定義從Dockerfile中定義的行開始生效,而不是在命令行或其他地方使用參數開始生效

ARG指令定義變量之前、任何對該變量的引用返回的結果都是一個空字符串

一個ARG指令的有效范圍在其定義的構建階段內、如果要在多個階段中都有效、則必須在每個階段都飲食ARG指令。如下:

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

 ARG變量使用:

可以使用ARG或ENV指令來指定RUN指令可用的變量,如果ARG和ENV同時指定了一個相同名稱的變量、則ENV設置的變量會覆蓋ARG設置的變量。如下:

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM