86 lines
2.2 KiB
Markdown
86 lines
2.2 KiB
Markdown
|
# Dockerfile
|
|||
|
|
|||
|
## 格式
|
|||
|
|
|||
|
Dockerfile 中,对于指令不区分大小写,但是推荐使用大写,来区别于参数。
|
|||
|
|
|||
|
Dockerfile 中,将按照指令(instruction)出现次序依次执行。**注意:Dockerfile 必须从 `FROM` 指令开始。**
|
|||
|
|
|||
|
Dockerfile 中,将 `#` 开头的行作为注释,除非该行是有效的解析指令(parser directives)。一行中的 `#` 标记被视为参数。注释中不支持换行符。
|
|||
|
|
|||
|
示例:
|
|||
|
|
|||
|
```
|
|||
|
# Comment
|
|||
|
RUN echo 'we are running some # of cool things'
|
|||
|
```
|
|||
|
|
|||
|
## 解析指令(parser directives)
|
|||
|
|
|||
|
解析指令是可选的,并且会影响 Dockerfile 中后续行的处理方式。解析指令不会将图层添加到构建中,并且不会显示为构建步骤。解析指令以 `# directive=value` 的形式写入特殊类型的注释。单个指令只能使用一次。
|
|||
|
|
|||
|
一旦注释,空行或构建指令已被处理,Docker 不再查找解析指令。相反,它将任何符合解析指令格式的内容视为注释,不会尝试验证它是否可能是解析指令。因此,所有解析指令都必须位于Dockerfile 的最顶端。
|
|||
|
|
|||
|
解析指令不区分大小写。但是,约定是小写。约定还包括在任何解析指令之后的空白行。解析指令不支持续行符。
|
|||
|
|
|||
|
以下列举几个不合规范的示例。
|
|||
|
|
|||
|
因为续行符而无效:
|
|||
|
|
|||
|
```
|
|||
|
# direc \
|
|||
|
tive=value
|
|||
|
```
|
|||
|
|
|||
|
因为出现两次解析指令而无效:
|
|||
|
|
|||
|
```
|
|||
|
# directive=value1
|
|||
|
# directive=value2
|
|||
|
|
|||
|
FROM ImageName
|
|||
|
```
|
|||
|
|
|||
|
解析指令由于出现在构建指令后,而被视为注释:
|
|||
|
|
|||
|
```
|
|||
|
FROM ImageName
|
|||
|
# directive=value
|
|||
|
```
|
|||
|
|
|||
|
解析指令由于出现在注释后,而被视为注释:
|
|||
|
|
|||
|
```
|
|||
|
# About my dockerfile
|
|||
|
# directive=value
|
|||
|
FROM ImageName
|
|||
|
```
|
|||
|
|
|||
|
因为无法识别,未知的指令被视为注释。此外,因为前一个未知指定被视为注释,后一个指令相当于出现在注释后,而也被视为了注释:
|
|||
|
|
|||
|
```
|
|||
|
# unknowndirective=value
|
|||
|
# knowndirective=value
|
|||
|
```
|
|||
|
|
|||
|
解析器指令中允许使用非分行空白。因此,以下几行都是一致对待的:
|
|||
|
|
|||
|
```
|
|||
|
#directive=value
|
|||
|
# directive =value
|
|||
|
# directive= value
|
|||
|
# directive = value
|
|||
|
# dIrEcTiVe=value
|
|||
|
```
|
|||
|
|
|||
|
### escape
|
|||
|
|
|||
|
```
|
|||
|
# escape=\ (backslash)
|
|||
|
```
|
|||
|
|
|||
|
```
|
|||
|
# escape=` (backtick)
|
|||
|
```
|
|||
|
|
|||
|
在 Dockerfile 中,
|