多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### ENV 设置环境变量 格式有两种: - `ENV <key> <value>` - `ENV <key1>=<value1> <key2>=<value2>...` 这个指令很简单,就是设置环境变量而已,无论是后面的其它指令,如 `RUN`,还是运行时的应用,都可以直接使用这里定义的环境变量。 ``` <pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">ENV VERSION</span><span class="pun">=</span><span class="lit">1.0</span><span class="pln"> DEBUG</span><span class="pun">=</span><span class="pln">on \</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> NAME</span><span class="pun">=</span><span class="str">"Happy Feet"</span></code></li> </ol> ``` 这个例子中演示了如何换行,以及对含有空格的值用双引号括起来的办法,这和 Shell 下的行为是一致的。 定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。比如在官方 `node` 镜像 `Dockerfile` 中,就有类似这样的代码: ``` <pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">ENV NODE_VERSION </span><span class="lit">7.2</span><span class="pun">.</span><span class="lit">0</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">RUN curl </span><span class="pun">-</span><span class="pln">SLO </span><span class="str">"https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz"</span><span class="pln"> \</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">&&</span><span class="pln"> curl </span><span class="pun">-</span><span class="pln">SLO </span><span class="str">"https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"</span><span class="pln"> \</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">&&</span><span class="pln"> gpg </span><span class="pun">--</span><span class="pln">batch </span><span class="pun">--</span><span class="pln">decrypt </span><span class="pun">--</span><span class="pln">output SHASUMS256</span><span class="pun">.</span><span class="pln">txt SHASUMS256</span><span class="pun">.</span><span class="pln">txt</span><span class="pun">.</span><span class="pln">asc \</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">&&</span><span class="pln"> grep </span><span class="str">" node-v$NODE_VERSION-linux-x64.tar.xz\$"</span><span class="pln"> SHASUMS256</span><span class="pun">.</span><span class="pln">txt </span><span class="pun">|</span><span class="pln"> sha256sum </span><span class="pun">-</span><span class="pln">c </span><span class="pun">-</span><span class="pln"> \</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">&&</span><span class="pln"> tar </span><span class="pun">-</span><span class="pln">xJf </span><span class="str">"node-v$NODE_VERSION-linux-x64.tar.xz"</span><span class="pln"> </span><span class="pun">-</span><span class="pln">C </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="kwd">local</span><span class="pln"> </span><span class="pun">--</span><span class="pln">strip</span><span class="pun">-</span><span class="pln">components</span><span class="pun">=</span><span class="lit">1</span><span class="pln"> \</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">&&</span><span class="pln"> rm </span><span class="str">"node-v$NODE_VERSION-linux-x64.tar.xz"</span><span class="pln"> SHASUMS256</span><span class="pun">.</span><span class="pln">txt</span><span class="pun">.</span><span class="pln">asc SHASUMS256</span><span class="pun">.</span><span class="pln">txt \</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">&&</span><span class="pln"> ln </span><span class="pun">-</span><span class="pln">s </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="kwd">local</span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">node </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="kwd">local</span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">nodejs</span></code></li> </ol> ``` 在这里先定义了环境变量 `NODE_VERSION`,其后的 `RUN` 这层里,多次使用 `$NODE_VERSION` 来进行操作定制。可以看到,将来升级镜像构建版本的时候,只需要更新 `7.2.0` 即可,`Dockerfile` 构建维护变得更轻松了。 下列指令可以支持环境变量展开: `ADD`、`COPY`、`ENV`、`EXPOSE`、`LABEL`、`USER`、`WORKDIR`、`VOLUME`、`STOPSIGNAL`、`ONBUILD`。 可以从这个指令列表里感觉到,环境变量可以使用的地方很多,很强大。通过环境变量,我们可以让一份 `Dockerfile` 制作更多的镜像,只需使用不同的环境变量即可。