2016-11-26 02:02:43 +08:00
|
|
|
|
### ENV 设置环境变量
|
|
|
|
|
|
|
|
|
|
格式有两种:
|
|
|
|
|
|
|
|
|
|
* `ENV <key> <value>`
|
|
|
|
|
* `ENV <key1>=<value1> <key2>=<value2>...`
|
|
|
|
|
|
2017-03-02 19:58:32 +08:00
|
|
|
|
这个指令很简单,就是设置环境变量而已,无论是后面的其它指令,如 `RUN`,还是运行时的应用,都可以直接使用这里定义的环境变量。
|
2016-11-26 02:02:43 +08:00
|
|
|
|
|
|
|
|
|
```Dockerfie
|
|
|
|
|
ENV VERSION=1.0 DEBUG=on \
|
|
|
|
|
NAME="Happy Feet"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
这个例子中演示了如何换行,以及对含有空格的值用双引号括起来的办法,这和 Shell 下的行为是一致的。
|
|
|
|
|
|
|
|
|
|
定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。比如在官方 `node` 镜像 `Dockerfile` 中,就有类似这样的代码:
|
|
|
|
|
|
|
|
|
|
```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` 构建维护变得更轻松了。
|
|
|
|
|
|
2016-11-27 23:29:45 +08:00
|
|
|
|
下列指令可以支持环境变量展开: `ADD`、`COPY`、`ENV`、`EXPOSE`、`LABEL`、`USER`、`WORKDIR`、`VOLUME`、`STOPSIGNAL`、`ONBUILD`。
|
2016-11-26 02:02:43 +08:00
|
|
|
|
|
|
|
|
|
可以从这个指令列表里感觉到,环境变量可以使用的地方很多,很强大。通过环境变量,我们可以让一份 `Dockerfile` 制作更多的镜像,只需使用不同的环境变量即可。
|