Dockerfile - ARG 指令详解
Dockerfile - ARG 指令详解
1、ARG
作用:定义创建镜像过程中使用的变量
格式: ARG <name>[=<default value>]
详解
1、在执行 docker build 时,可以通过 --build-arg <参数名>=<值> 来为声明的变量赋值
2、当镜像编译成功后,ARG 指定的变量将不再存在(ENV指定的变量将在镜像中保留)
3、Docker内置了一些镜像创建变量,用户可以直接使用而无须声明,包括(不区分大小写)
Docker自带的如下ARG参数,可以在其他指令中直接引用:
HTTP_PROXY
http_proxy
HTTPS_PROXY
https_proxy
FTP_PROXY
ftp_proxy
NO_PROXY
no_proxy
2、ARG 和 ENV 的区别
- ARG 定义的变量只会存在于镜像构建过程,启动容器后并不保留这些变量
- ENV 定义的变量在启动容器后仍然保留
注意
不要通过 ARG 保存密码之类的信息,因为 docker history 还是可以看到所有值的
ARG 指令有生效范围
1、如果在 FROM 指令之前指定,那么只能用于 FROM 指令中ARG DOCKER_USERNAME=library
FROM ${DOCKER_USERNAME}/alpine
RUN set -x ; echo ${DOCKER_USERNAME}
2、使用上述 Dockerfile 会发现无法输出 ${DOCKER_USERNAME} 变量的值
要想正常输出,必须在 FROM 之后再次指定 ARG
# 只在 FROM 中生效
ARG DOCKER_USERNAME=library
FROM ${DOCKER_USERNAME}/alpine
# 要想在 FROM 之后使用,必须再次指定
ARG DOCKER_USERNAME=library
RUN set -x ; echo ${DOCKER_USERNAME}多阶段构建的时候,ARG 定义的变量,每个 FROM 都能用
# 这个变量在每个 FROM 中都生效
ARG DOCKER_USERNAME=library
FROM ${DOCKER_USERNAME}/alpine
RUN set -x ; echo 1
FROM ${DOCKER_USERNAME}/alpine
RUN set -x ; echo 2
3、官方文档
更多推荐
所有评论(0)