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

 

相關資料:

相關文章
相關標籤/搜索