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,7 +1,11 @@
## 7.1 RUN 执行命令
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
如下代码块所示展示了相关示例
```docker
RUN <command>
RUN ["executable", "param1", "param2"]
@@ -13,7 +17,11 @@ RUN ["executable", "param1", "param2"]
### 两种格式对比
#### 1. Shell 格式
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1Shell 格式
如下代码块所示展示了相关示例
```docker
RUN apt-get update
@@ -26,7 +34,9 @@ RUN apt-get update
RUN echo "Hello" > /test.txt
```
#### 2. Exec 格式
#### 2Exec 格式
如下代码块所示展示了相关示例
```docker
RUN ["apt-get", "update"]
@@ -34,17 +44,19 @@ RUN ["apt-get", "update"]
- **特点**直接调用可执行文件不经过 Shell
- **优势**避免 Shell 字符串解析问题适用于参数中包含特殊字符的情况
- **注意**无法使用 `$VAR` 环境变量替换除非显式调用 shell
- **注意**无法使用 `$VAR` 环境变量替换 (除非显式调用 shell)
---
### 常见最佳实践
#### 1. 组合命令减少层数
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1组合命令 (减少层数)
每一个 `RUN` 指令都会新建一层镜像为了减少镜像体积和层数应使用 `&&` 连接命令
** 糟糕的写法**创建 3
** 糟糕的写法** (创建 3 )
```docker
RUN apt-get update
@@ -52,7 +64,7 @@ RUN apt-get install -y nginx
RUN rm -rf /var/lib/apt/lists/*
```
** 推荐写法**创建 1
** 推荐写法** (创建 1 )
```docker
RUN apt-get update && \
@@ -60,7 +72,7 @@ RUN apt-get update && \
rm -rf /var/lib/apt/lists/*
```
#### 2. 清理缓存
#### 2清理缓存
在安装完软件后立即清除缓存可以显著减小镜像体积
@@ -74,7 +86,7 @@ RUN apt-get update && \
RUN apk add --no-cache package-bar
```
#### 3. 使用 `set -e` `pipefail`
#### 3使用 `set -e` `pipefail`
默认情况下管道命令 `cmd1 | cmd2` 只要 `cmd2` 成功整个 `RUN` 就视为成功
@@ -97,21 +109,27 @@ RUN wget http://url | gzip -d > file
### 常见问题
#### Q: 为什么 `RUN cd /app` 不生效
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### Q为什么 `RUN cd /app` 不生效
如下代码块所示展示了相关示例
```docker
RUN cd /app
RUN touch hello.txt
```
**结果**`hello.txt` 会出现在根目录 `/`而不是 `/app`**原因**每个 `RUN` 都在一个新的 Shell/容器 环境中执行`cd` 只影响当前 `RUN` 的环境**解决**使用 `WORKDIR` 指令
**结果**`hello.txt` 会出现在根目录 `/`而不是 `/app`**原因**每个 `RUN` 都在一个新的 Shell/容器环境中执行`cd` 只影响当前 `RUN` 的环境**解决**使用 `WORKDIR` 指令
```docker
WORKDIR /app
RUN touch hello.txt
```
#### Q: 环境变量不生效
#### Q环境变量不生效
如下代码块所示展示了相关示例
```docker
RUN export MY_VAR=hello
@@ -129,7 +147,9 @@ RUN echo $MY_VAR
### 高级技巧
#### 1. 使用 BuildKit 的挂载缓存
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 1使用 BuildKit 的挂载缓存
BuildKit 支持在 `RUN` 指令中使用 `--mount` 挂载缓存加速构建
@@ -148,7 +168,7 @@ RUN --mount=type=cache,target=/go/pkg/mod \
go build -o app
```
#### 2. 挂载密钥
#### 2挂载密钥
安全地使用 SSH 密钥或 Token而不将其记录在镜像中