Dockerfile(15) - ARG 指令详解

简介: Dockerfile(15) - ARG 指令详解

ARG


作用:定义创建镜像过程中使用的变量

格式: ARG <name>[=<default value>]

 

详解

  • 在执行 docker build 时,可以通过 --build-arg <参数名>=<值> 来为声明的变量赋值
  • 当镜像编译成功后,ARG 指定的变量将不再存在(ENV指定的变量将在镜像中保留)
  • Docker内置了一些镜像创建变量,用户可以直接使用而无须声明,包括(不区分大小写)HTTP_PROXY、HTTPS_PROXY、FTP_PROXY、NO_PROXY

 

ARG 和 ENV 的区别

  • ARG 定义的变量只会存在于镜像构建过程,启动容器后并不保留这些变量
  • ENV 定义的变量在启动容器后仍然保留

 

注意

不要通过 ARG 保存密码之类的信息,因为 docker history 还是可以看到所有值的

 

ARG 指令有生效范围


如果在 FROM 指令之前指定,那么只能用于 FROM 指令中

ARG DOCKER_USERNAME=library


FROM ${DOCKER_USERNAME}/alpine


RUN set -x ; echo ${DOCKER_USERNAME}

  • 使用上述 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


ARG 其他用法


暂时不举例了,感觉应该不会用很多

https://docs.docker.com/engine/reference/builder/#arg

相关文章
|
缓存 Linux Go
Dockerfile(11) - COPY 指令详解
Dockerfile(11) - COPY 指令详解
2309 0
|
NoSQL 关系型数据库 MySQL
Dockerfile(9) - ENTRYPOINT 指令详解
Dockerfile(9) - ENTRYPOINT 指令详解
689 0
|
5月前
|
JSON 物联网 Shell
Dockerfile指令详解
Dockerfile指令详解
67 0
|
10月前
|
数据安全/隐私保护 Docker 容器
45-Dockerfile-ARG/ENV指令
45-Dockerfile-ARG/ENV指令
|
10月前
|
Shell 开发工具 git
43-Dockerfile-FROM/LABEL/RUN指令
43-Dockerfile-FROM/LABEL/RUN指令
|
10月前
|
Docker 容器
48-Dockerfile-CMD/ENTRYPOINT指令
48-Dockerfile-CMD/ENTRYPOINT指令
|
10月前
|
容器
46-Dockerfile-USER/WORKDIR指令
46-Dockerfile-USER/WORKDIR指令
|
Docker 容器
Dockerfile文件中CMD指令与ENTRYPOINT指令的区别
本文是博主学习docker 制作镜像指令的记录,希望对大家有所帮助
156 0
Dockerfile文件中CMD指令与ENTRYPOINT指令的区别
|
缓存 Linux Go
Dockerfile(10) - ADD 指令详解
Dockerfile(10) - ADD 指令详解
1488 0
|
Shell Linux 开发工具
Dockerfile(4) - RUN 指令详解
Dockerfile(4) - RUN 指令详解
372 0