Docker变量的相关总结

 

1、AVG与ENV

 一、在Dockerfile中,使用ARG与ENV的区别docker

ARG:ARG定义的变量用于构建Docker镜像,在经过build把Dockerfile构建成镜像后,ARG定义的变量便不在起做用;    
ENV:ENV定义的变量用于容器的环境变量,在Dockerfile里定义后,在容器的运行时是可使用这个变量的微服务


上面可能读起来比较绕,看下这个实例就明白了:ui

1)Dockerfile里有以下两行编码

ARG VAR_A=1
ENV VAR_B ${VAR_A}


2)经过构建镜像并启动容器后,查看环境变量以下spa

$ docker exec ContainerID env
VAR_B=1

 

3)从实例可看出,ARG定义的变量在Dockerfile中使用,构建完镜像后,就下岗;而ENV定义的变量会带入容器的环境变量。code

能够用一张图来表示ARG与ENV的做用域:orm



二、一般能够把ARG与ENV结合使用blog

ARG buildtime_variable=default_value
ENV env_var_name=$buildtime_variable 


使用这种方式能够解决Dockerfile硬编码的问题,好比在微服务下不少服务的状况下,构建一个镜像修改一次Dockerfile,而使用这种方式Dockerfile是不变的,只须要在docker build的时候加上参数值就能够。作用域

 

2、传递环境变量的方法

1)Dockerfile文件里经过ENV指定

2)docker [option] -e VAR_NAME=VALUE指定,若是build的Dockerfile文件里有,将会覆盖

3)docker service update --env-add VAR_NAME=VALUE 添加get

 

3、查看环境变量的方法

一、经过docker exec命令查看

$ docker exec ContainerID env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=lile
LANG=en_US.UTF-8
JAVA_VERSION=8
......

 

二、经过docker inspect方式查看

docker inspect --format='{{.Config.Env}}' ContainerID

 

三、进入容器经过/proc/PID/environ的方式

$ cat /proc/1/environ

 

4、其余

经过docker inspect可用经过--format指定获取值,可用不用对返回的JSON经过代码作分析;如:获取机器的IP
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ContainerID

 

相关资料:

相关文章
相关标签/搜索