Dockerfile(15) - ARG 指令詳解


ARG

作用:定義創建鏡像過程中使用的變量

格式: ARG <name>[=<default value>] 

 

詳解

  • 在執行 docker build 時,可以通過 --build-arg <參數名>=<值> 來為聲明的變量賦值
  • 當鏡像編譯成功后,ARG 指定的變量將不再存在(ENV指定的變量將在鏡像中保留)
  • Docker內置了一些鏡像創建變量,用戶可以直接使用而無須聲明,包括(不區分大小寫)HTTP_PROXY、HTTPS_PROXY、FTP_PROXY、NO_PROXY

 

ARG 和 ENV 的區別

  • ARG 定義的變量只會存在於鏡像構建過程,啟動容器后並不保留這些變量
  • ENV 定義的變量在啟動容器后仍然保留

 

注意

不要通過 ARG 保存密碼之類的信息,因為  docker history  還是可以看到所有值的

 

ARG 指令有生效范圍

如果在 FROM 指令之前指定,那么只能用於 FROM 指令中

ARG DOCKER_USERNAME=library

FROM ${DOCKER_USERNAME}/alpine

RUN set -x ; echo ${DOCKER_USERNAME}
  •  使用上述 Dockerfile 會發現無法輸出 ${DOCKER_USERNAME} 變量的值
  • 要想正常輸出,必須在 FROM 之后再次指定 ARG
# 只在 FROM 中生效
ARG DOCKER_USERNAME=library

FROM ${DOCKER_USERNAME}/alpine

# 要想在 FROM 之后使用,必須再次指定
ARG DOCKER_USERNAME=library

RUN set -x ; echo ${DOCKER_USERNAME}

多階段構建的時候,ARG 定義的變量,每個 FROM 都能用

# 這個變量在每個 FROM 中都生效
ARG DOCKER_USERNAME=library

FROM ${DOCKER_USERNAME}/alpine

RUN set -x ; echo 1

FROM ${DOCKER_USERNAME}/alpine

RUN set -x ; echo 2

 

ARG 其他用法

暫時不舉例了,感覺應該不會用很多

https://docs.docker.com/engine/reference/builder/#arg

 


免責聲明!

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



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