Dockerfile中可以通过ENV指令设置环境变量,不过当有多行的环境变量要设置时(比如,JDK环境变量配置),使用ENV再去设置就感觉比较繁琐,想像在Linux下一样通过设置对应的profile文件(或bashrc文件)来配置环境环境变量,这时候就可以通过echo指令进行配置。

1. RUN指令配置环境变量

以下是一个比较简单的示例,使用Dockerfile语法里的ENV和RUN指令配置环境变量。

1FROM ubuntu:latest
2COPY jdk1.8.0_151 /opt/jdk/
3
4ENV  JAVA_HOME=/opt/jdk
5RUN  export JAVA_HOME
6……

按该Dockerfile编译后的镜像,去执行的时候,可以发现只有JAVA_HOME可以正常输出,JRE_HOME就无法输出,想要也输出JRE_HOME需要按这个样例再来一个配置,显然这样比较繁琐。

1[root@ecs-82f5]~# docker exec -it 6662e122003c /bin/bash
2root@6662e122003c:/# echo $JAVA_HOME
3/opt/jdk
4root@6662e122003c:/# echo $JAVA_JRE
5
6root@6662e122003c:/#

2. echo配置环境变量

在dockerfile echo添加环境变量,或者要在一个文件中输入多行文本,使用\n即可:

 1[root@ecs-82f5]/envtest# cat Dockerfile
 2FROM ubuntu:latest
 3ADD jdk1.8.0_151 /opt/jdk1.8.0_151/
 4
 5# 用echo添加多行内容
 6RUN echo 'export JAVA_HOME=/opt/jdk1.8.0_151 \n\
 7export JRE_HOME=/opt/jdk1.8.0_151/jre \n\
 8export CLASSPATH=.:$JAVA_HOME/lib:/dt.jar:$JAVA_HOME/lib/tools.jar \n\
 9PATH=$PATH:$JAVA_HOME/bin \n\
10ulimit -u 4096'\
11>> ~/.bashrc
12
13CMD ["/bin/bash"]

编译镜像并执行后的结果:

 1[root@ecs-82f5]/envtest# docker build -t envtest:v1.0 .
 2[root@ecs-82f5]/envtest# docker run -it -d 2dd69bdc973e
 3781c5f98bca87c6badb5a38f8ea09a89cc7f712b321eacb67261d30fd41e05ff
 4[root@ecs-82f5]/envtest# docker exec -it 781c5f98bca8 /bin/bash
 5root@781c5f98bca8:/# echo $JAVA_HOME
 6/opt/jdk1.8.0_151
 7root@781c5f98bca8:/# echo $JRE_HOME
 8/opt/jdk1.8.0_151/jre
 9root@781c5f98bca8:/# echo $CLASSPATH
10.:/opt/jdk1.8.0_151/lib:/dt.jar:/opt/jdk1.8.0_151/lib/tools.jar
11root@781c5f98bca8:/#