ARG 構建參數 & ENV 設置環境變量—— Dockerfile


ARG 構建參數

ENV 設置環境變量

 

格式有兩種:

  • ENV <key> <value>
  • ENV <key1>=<value1> <key2>=<value2>...

這個指令很簡單,就是設置環境變量而已,

無論是后面的其它指令,如 RUN,還是運行時的應用都可以直接使用這里定義的環境變量。

ENV VERSION=1.0 DEBUG=on \
    NAME="Happy Feet"

演示了如何換行,以及對含有空格的值用雙引號括起來的辦法,這和 Shell 下的行為是一致的。 

 

定義了環境變量,那么在后續的指令中,就可以使用這個環境變量。

比如在官方 node 鏡像 Dockerfile 中,就有類似這樣的代碼:

ENV NODE_VERSION 7.2.0

RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
  && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
  && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
  && grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
  && tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \
  && rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
  && ln -s /usr/local/bin/node /usr/local/bin/nodejs

  

先定義了環境變量 NODE_VERSION,其后的 RUN 這層里,多次使用 $NODE_VERSION 來進行操作定制

可以看到,將來升級鏡像構建版本的時候,只需要更新 7.2.0 即可,Dockerfile 構建維護變得更輕松了。

 

下列指令可以支持環境變量展開: 

ADDCOPYENVEXPOSEFROMLABELUSERWORKDIRVOLUMESTOPSIGNALONBUILDRUN

 

可以從這個指令列表里感覺到,環境變量可以使用的地方很多,很強大

通過環境變量,我們可以讓一份 Dockerfile 制作更多的鏡像,只需使用不同的環境變量即可

 

ARG 構建參數

格式:ARG <參數名>[=<默認值>]

構建參數和 ENV 的效果一樣,都是設置環境變量

不同的是,ARG 所設置的構建環境的環境變量,在將來容器運行時是不會存在這些環境變量的

但是不要因此就使用 ARG 保存密碼之類的信息,因為 docker history 還是可以看到所有值的

 

Dockerfile 中的 ARG 指令是定義參數名稱,以及定義其默認值

默認值可以在構建命令 docker build 中用 --build-arg <參數名>=<值> 來覆蓋

 

在 1.13 之前的版本,要求 --build-arg 中的參數名,必須在 Dockerfile 中用 ARG 定義過了,換句話說,就是 --build-arg 指定的參數,必須在 Dockerfile 中使用了。如果對應參數沒有被使用,則會報錯退出構建。從 1.13 開始,這種嚴格的限制被放開,不再報錯退出,而是顯示警告信息,並繼續構建

這對於使用 CI 系統,用同樣的構建流程構建不同的 Dockerfile 的時候比較有幫助,避免構建命令必須根據每個 Dockerfile 的內容修改

 


免責聲明!

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



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