Dockerfile中配置环境变量

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

1. RUN指令配置环境变量

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

FROM ubuntu:latest
COPY jdk1.8.0_151 /opt/jdk/
ENV  JAVA_HOME=/opt/jdk
RUN  export JAVA_HOME
……

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

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

2. echo配置环境变量

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

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

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

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

发表评论

您的电子邮箱地址不会被公开。