Dockerfiles ENV和ARG的应用
在写Dockerfile时, ENV和ARG,包括.env都是很容易弄混的概念。让我们对其进行区分。
.env文件
和docker-compose.yml配合使用。并不和Dockerfile一起使用
env_file
在Dockerfile中使用,当环境变量很多,可食用该参数,指定对应的变量文件。
ARG
在Dockerfile中使用,仅仅在build docker image的过程中(包括CMD和ENTRYPOINT)有效,在image被创建和container启动之后,无效。
如果你在Dockerfile中使用了ARG但并未给定初始值,则在运行docker build的时候未指定该ARG变量,则会失败。
虽然其在container启动后不再生效,但是使用‘docker history’可以查看到。所以,敏感数据不建议使用ARG.
设置ARG和使用ARG编译image, 实例如下:
- # In the Dockerfile
- ARG some_variable_name
- # or with a hard-coded default:
- #ARG some_variable_name=default_value
- RUN echo "Oh dang look at that $some_variable_name"
- # In the shell command
- docker build --build-arg some_variable_name=a_value
- # Then you will get
- Oh dang look at that a_value
ENV
在Dockerfile中使用,在build docker imag的过程中有效,在image被创建和container启动后作为环境变量依旧也有效,并且可以重写覆盖。printenv可查看其值。
设置ENV和使用env,实例如下
- # no default value
- ENV hey
- # a default value
- ENV foo /bar
- # or ENV foo=/bar
- # ENV values can be used during the build
- ADD . $foo
- # or ADD . ${foo}
- # translates to: ADD . /bar
- # Use the following docker commands to set env
- docker run -e "env_var_name=another_value" alpine env
- docker run -e env_var_name alpine env
- docker run --env-file=env_file_name alpine env
有时候,ARG和ENV一起使用,实例如下图:
- # expect a build-time variable
- ARG A_VARIABLE
- # use the value to set the ENV var default
- ENV an_env_var=$A_VARIABLE
- # if not overridden, that value of an_env_var will be available to your containers!
相关推荐
xysoul 2020-11-03
ShangQuan0 2020-09-10
fearlessxjdx 2020-09-04
yss0 2020-08-19
young依然 2020-08-17
Crystalqy 2020-08-15
TaoTaoFu 2020-08-03
vtnews 2020-07-29
小信 2020-07-28
白开水 2020-07-19
lihy0 2020-07-18
糊一笑 2020-07-04
wzg0wzg 2020-07-04
pigsmall 2020-07-04
VFCSDN 2020-07-04
qdqht00 2020-06-28
tosim 2020-06-24
tianlong 2020-06-21
yudiewenyuan 2020-06-21