Dockerfile - ENV與ARG參數
ENV
ENV是在build的時候,可以定義一些變數,讓後面指令在執行時候可以參考...
From resin/rpi-raspbian
ENV NODE_VER=node-v5.9.1-linux-armv7l
ADD ./${NODE_VER} /
RUN ln -s /${NODE_VER} /node
ENV PATH=/node/bin:$PATH
CMD ["node"]
上面Dockerfile的第二行,定義NODE_VER變數,讓第三行中的ADD參考,因此ADD會在執行時間,使用ENV所定義的值來做ADD的動作。
注意:在Dockerfile中若沒有第二行的指定,則第三行會參考到空字串。
ARG
ARG在build時候是可以從外部以--build-arg帶入的變數,讓build的動作可結合外部的指令給定一些建構時候所需的參數...
From resin/rpi-raspbian
ARG NODE_VER
ADD ./${NODE_VER:-node-v5.9.1-linux-armv7l} /
RUN ln -s /${NODE_VER} /node
ENV PATH=/node/bin:$PATH
CMD ["node"]
上面Dockerfile在第二行的部分,會指定一個NODE_VER的變數,而在第三行時候,會引用該變數在本地端找到指令列所指定的字串目錄進行複製到根目錄(node-v5.9.0-linux-armv7l),如果未給定時候,則是以預設的node-v5.9.1-linux-armv7l為值...
Build的時候,可以這樣下參數:
docker build --build-arg NODE_VER=node-v5.9.0-linux-armv7l .
變形
在ENV與ARG參數的設定上,可以透過下面方式增加一些變化...
- ${variable:-word} 代表,如果variable有給值,則以variable設定的文字為主,如未設定,則以word字串為主。
- ${variable:+word} 代表,如果variable有給值,則值為word;如果variable未給值,則最後結果為空字串(empty)。