style: apply global formatting fixes (struct, spacing, zhlint)

This commit is contained in:
Baohua Yang
2026-02-21 11:08:52 -08:00
parent ad68b2d973
commit 79ac9c639a
159 changed files with 1708 additions and 882 deletions

View File

@@ -1,12 +1,16 @@
## 7.13 ONBUILD 为他人做嫁衣裳
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
如下代码块所示展示了相关示例
```docker
ONBUILD <其它指令>
```
`ONBUILD` 是一个特殊的指令它后面跟的是其它指令 `RUN`, `COPY` 这些指令**在当前镜像构建时不会执行**只有当以当前镜像为基础镜像去构建下一级镜像时才会被执行
`ONBUILD` 是一个特殊的指令它后面跟的是其它指令 ( `RUN``COPY` )这些指令**在当前镜像构建时不会执行**只有当以当前镜像为基础镜像去构建下一级镜像时才会被执行
---
@@ -57,6 +61,8 @@ FROM my-node-base
### 执行机制
如下代码块所示展示了相关示例
```
基础镜像构建:
Dockerfile (含 ONBUILD) ──build──> 基础镜像 (记录了 ONBUILD 触发器)
@@ -70,7 +76,11 @@ FROM 基础镜像 ──build──> 读取基础镜像触发器 ──> 执行
### 常见使用场景
#### 1. 自动处理依赖安装
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1自动处理依赖安装
如下代码块所示展示了相关示例
```docker
## Python 基础镜像
@@ -79,7 +89,9 @@ ONBUILD COPY requirements.txt ./
ONBUILD RUN pip install -r requirements.txt
```
#### 2. 自动编译代码
#### 2自动编译代码
如下代码块所示展示了相关示例
```docker
## Go 基础镜像
@@ -88,7 +100,9 @@ ONBUILD COPY . .
ONBUILD RUN go build -o app main.go
```
#### 3. 处理静态资源
#### 3处理静态资源
如下代码块所示展示了相关示例
```docker
## Nginx 静态网站基础镜像
@@ -100,30 +114,34 @@ ONBUILD COPY dist/ /usr/share/nginx/html/
### 注意事项
#### 1. 继承性限制
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1继承性限制
`ONBUILD` 指令**只会继承一次**
- 镜像 A ( ONBUILD)
- 镜像 B (FROM A) -> 触发 ONBUILD
- 镜像 C (FROM B) -> **不会**再次触发 ONBUILD
#### 2. 构建上下文
#### 2构建上下文
子镜像构建时`ONBUILD COPY . .` 中的 `.` 指的是**子项目**的构建上下文而不是基础镜像的上下文
#### 3. 不允许级联
#### 3不允许级联
`ONBUILD ONBUILD` 是非法的你不能写 `ONBUILD ONBUILD COPY ...`
#### 4. 可能会导致构建失败
#### 4可能会导致构建失败
由于 `ONBUILD` 实际上是在子镜像中执行指令如果子项目的上下文不满足要求例如缺少 `package.json`会导致子镜像构建失败且错误信息可能比较隐晦
由于 `ONBUILD` 实际上是在子镜像中执行指令如果子项目的上下文不满足要求 (例如缺少 `package.json`)会导致子镜像构建失败且错误信息可能比较隐晦
---
### 最佳实践
#### 1. 命名规范
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1命名规范
建议在镜像标签中添加 `-onbuild` 后缀明确告知使用者该镜像包含触发器
@@ -132,11 +150,11 @@ node:20-onbuild
python:3.12-onbuild
```
#### 2. 避免执行耗时操作
#### 2避免执行耗时操作
尽量不要在 `ONBUILD` 中执行过于耗时或不确定的操作如更新系统软件这会让子镜像构建变得缓慢且不可控
尽量不要在 `ONBUILD` 中执行过于耗时或不确定的操作 (如更新系统软件)这会让子镜像构建变得缓慢且不可控
#### 3. 清理工作
#### 3清理工作
如果 `ONBUILD` 指令产生了临时文件最好在同一个指令链中清理或者提供机制让子镜像清理