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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章