指令
2个注释类
指令
syntax
17个非注释类
非注释类指令大小写不敏感,但为了可读性,官方建议大写。
ARG
- 定义在后续Dockerfile中可以使用的变量。
- 变量的可使用范围为:
2.1 若ARG定义在Dockerfile中第一个FROM之前,则其可在后续所有的指令中使用,即使是不同的build stage;
2.2【 若ARG定义在Dokcerfile中第一个FROM之后,则后续Dockfile中同一个build stage的其他指令,但不包括如CMD这种在docker build时不被执行的指令 】。 - 变量通过 【 $变量名 或 ${变量名} 】来使用,与shell脚本一样。
- 在ARG定义变量前使用变量,将得到空字符串。
- 定义多个ARG时,不可以使用 【\】反划线来跨行。
ARG 变量名
AGR 变量名=默认值
// 变量值可通过 [ docker build --build-arg 变量名=变量值 ] 传递进来
// 多个变量的传递可通过 [ docker build --build-arg 变量名1=变量值1 --build-arg 变量名2=变量值2 ]
// 同一个Dockerfile中可存在多个FROM指令,每个FROM指令间的范围为一个build stage
// 如下: 变量名1 不能被 [ FROM 基础镜像2 ] 之后的指令使用
FROM 基础镜像1
ARG 变量名1
...其他指令
FROM 基础镜像2
ARG 变量名2
...其他指令
// 以下是一个简单的Dockerfile例子,用于说明ARG的作用域
ARG 变量名1 //在Dockerfile中所有非注释指令的第一行定义的 [ 变量名1 ]
FROM 基础镜像1
ARG 变量名1 // 为了在本次build stage中的后续指令使用第一行定义的变量,
// 需定义一个 [ 没有指定默认值的同名变量 ]
RUM echo ${
变量名1}
// 请务在CMD或ENTRYPOINT中使用ARG定义的变量
FROM 基础镜像2
ARG 变量名1
RUM echo ${
变量名1}
FROM 基础镜像3:${
变量名1} // 若在FROM中使用第一行定义的 [ 变量名1 ],则可直接使用而无需定义
...其他指令
FROM
- 指定本次build stage的基础镜像
- FROM与FROM之间为一个build stage
- FROM不一定是Dockerfile第一行指令,其之前可出现 【 注释、注释类关键、ARG 】
FROM 基础镜像name // 不通过 [ 冒号: ] 来指定基础镜像的tag时,默认取latest