style(docs): standardize heading formats and numbering

- Enforce Level 1-3 structural numbering based on SUMMARY.md hierarchy
- Remove structural numbering from Level 4+ headings
- Eliminate single child headings by converting to bold text
- Auto-inject summary text for headings with multiple children missing intro text
- Exclude Appendix chapters from structural numbering
- Avoid modifying code block contents
- Add script to detect non-standard English usage in headers
This commit is contained in:
Baohua Yang
2026-02-21 22:40:33 -08:00
parent 33af380be1
commit 175aaae48a
136 changed files with 1015 additions and 766 deletions

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
### 7.10.1 基本语法
如下代码块所示展示了相关示例
@@ -14,7 +14,7 @@ WORKDIR <工作目录路径>
---
### 基本用法
### 7.10.2 基本用法
如下代码块所示展示了相关示例
@@ -28,7 +28,7 @@ COPY . . # 复制到 /app/
---
### 为什么需要 WORKDIR
### 7.10.3 为什么需要 WORKDIR
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -73,7 +73,7 @@ RUN echo "hello" > world.txt # 创建 /app/world.txt
---
### 相对路径
### 7.10.4 相对路径
WORKDIR 支持相对路径基于上一个 WORKDIR
@@ -87,7 +87,7 @@ RUN pwd # 输出 /a/b/c
---
### 使用环境变量
### 7.10.5 使用环境变量
如下代码块所示展示了相关示例
@@ -100,7 +100,7 @@ RUN pwd # 输出 /app
---
### 多阶段构建中的 WORKDIR
### 7.10.6 多阶段构建中的 WORKDIR
如下代码块所示展示了相关示例
@@ -123,7 +123,7 @@ COPY --from=builder /build/dist .
---
### 最佳实践
### 7.10.7 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -186,7 +186,7 @@ WORKDIR /data
---
### 与其他指令的关系
### 7.10.8 与其他指令的关系
相关信息如下表
@@ -208,7 +208,7 @@ CMD ["./start.sh"] # /app/start.sh
---
### 运行时覆盖
### 7.10.9 运行时覆盖
使用 `-w` 参数覆盖工作目录

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
### 7.11.1 基本语法
如下代码块所示展示了相关示例
@@ -15,7 +15,7 @@ USER <UID>[:<GID>]
---
### 为什么要使用 USER
### 7.11.2 为什么要使用 USER
> 笔者强调以非 root 用户运行容器是最重要的安全实践之一
@@ -36,7 +36,7 @@ flowchart LR
---
### 基本用法
### 7.11.3 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -78,7 +78,7 @@ USER 1001:1001
---
### 用户必须已存在
### 7.11.4 用户必须已存在
`USER` 指令只能切换到 **已存在** 的用户
@@ -124,7 +124,7 @@ RUN addgroup -g 1001 -S appgroup && \
---
### 运行时切换用户
### 7.11.5 运行时切换用户
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -176,7 +176,7 @@ exec gosu redis "$@"
---
### 运行时覆盖用户
### 7.11.6 运行时覆盖用户
使用 `-u` `--user` 参数
@@ -192,7 +192,7 @@ $ docker run -u root myimage
---
### 文件权限处理
### 7.11.7 文件权限处理
切换用户后确保应用有权访问文件
@@ -221,7 +221,7 @@ CMD ["node", "server.js"]
---
### 最佳实践
### 7.11.8 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -277,7 +277,7 @@ CMD ["node", "server.js"]
---
### 常见问题
### 7.11.9 常见问题
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
### 7.12.1 基本语法
如下代码块所示展示了相关示例
@@ -15,7 +15,7 @@ HEALTHCHECK NONE
---
### 为什么需要 HEALTHCHECK
### 7.12.2 为什么需要 HEALTHCHECK
在没有 HEALTHCHECK 之前Docker 只能通过 **进程退出码** 来判断容器状态**问题场景**
@@ -35,7 +35,7 @@ Starting ──成功──> Healthy ──失败N次──> Unhealthy
---
### 基本用法
### 7.12.3 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -70,7 +70,7 @@ HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
---
### 屏蔽健康检查
### 7.12.4 屏蔽健康检查
如果基础镜像定义了 HEALTHCHECK但你不想使用它
@@ -81,7 +81,7 @@ HEALTHCHECK NONE
---
### 常见检查脚本
### 7.12.5 常见检查脚本
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -124,7 +124,7 @@ HEALTHCHECK CMD ["healthcheck.sh"]
---
### Compose 中使用
### 7.12.6 Compose 中使用
可以在 `compose.yaml` ( `docker-compose.yml`) 中覆盖或定义健康检查
@@ -156,7 +156,7 @@ services:
---
### 查看健康状态
### 7.12.7 查看健康状态
运行以下命令
@@ -187,7 +187,7 @@ $ docker inspect --format '{{json .State.Health}}' mycontainer | jq
---
### 最佳实践
### 7.12.8 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
### 7.13.1 基本语法
如下代码块所示展示了相关示例
@@ -14,7 +14,7 @@ ONBUILD <其它指令>
---
### 为什么需要 ONBUILD
### 7.13.2 为什么需要 ONBUILD
`ONBUILD` 主要用于制作 **语言栈基础镜像** **框架基础镜像**
@@ -60,7 +60,7 @@ FROM my-node-base
---
### 执行机制
### 7.13.3 执行机制
如下代码块所示展示了相关示例
@@ -75,7 +75,7 @@ FROM 基础镜像 ──build──> 读取基础镜像触发器 ──> 执行
---
### 常见使用场景
### 7.13.4 常见使用场景
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -113,7 +113,7 @@ ONBUILD COPY dist/ /usr/share/nginx/html/
---
### 注意事项
### 7.13.5 注意事项
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -139,7 +139,7 @@ ONBUILD COPY dist/ /usr/share/nginx/html/
---
### 最佳实践
### 7.13.6 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
### 7.14.1 基本语法
如下代码块所示展示了相关示例
@@ -14,7 +14,7 @@ LABEL <key>=<value> <key>=<value> ...
---
### 为什么需要 LABEL
### 7.14.2 为什么需要 LABEL
1. **版本管理**记录版本号构建时间Git Commit ID
2. **联系信息**维护者邮箱文档地址支持渠道
@@ -23,7 +23,7 @@ LABEL <key>=<value> <key>=<value> ...
---
### 基本用法
### 7.14.3 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -51,7 +51,7 @@ LABEL maintainer="user@example.com" \
---
### 常用标签规范
### 7.14.4 常用标签规范
为了标准和互操作性推荐使用 [OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys) 定义的标准标签:
@@ -84,7 +84,7 @@ LABEL org.opencontainers.image.authors="yeasy" \
---
### MAINTAINER 指令 (已废弃)
### 7.14.5 MAINTAINER 指令 (已废弃)
旧版本的 Dockerfile 中常看到 `MAINTAINER` 指令
@@ -107,7 +107,7 @@ LABEL org.opencontainers.image.authors="user@example.com"
---
### 动态标签
### 7.14.6 动态标签
配合 `ARG` 使用可以在构建时动态注入标签
@@ -130,7 +130,7 @@ $ docker build \
---
### 查看标签
### 7.14.7 查看标签
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
### 7.15.1 基本语法
如下代码块所示展示了相关示例
@@ -19,7 +19,7 @@ SHELL ["executable", "parameters"]
---
### 为什么要用 SHELL 指令
### 7.15.2 为什么要用 SHELL 指令
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -84,7 +84,7 @@ SHELL ["cmd", "/S", "/C"]
---
### 作用范围
### 7.15.3 作用范围
`SHELL` 指令可以出现多次每次只影响其后的指令
@@ -108,7 +108,7 @@ RUN echo "Using sh again"
---
### 对其他指令的影响
### 7.15.4 对其他指令的影响
`SHELL` 影响的是所有使用 **shell 格式** 的指令
@@ -123,7 +123,7 @@ RUN echo "Using sh again"
---
### 最佳实践
### 7.15.5 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
Docker 17.05 版本之前我们构建 Docker 镜像时通常会采用两种方式
### 全部放入一个 Dockerfile
### 7.17.1 全部放入一个 Dockerfile
一种方式是将所有的构建过程包含在一个 `Dockerfile` 包括项目及其依赖库的编译测试打包等流程这里可能会带来的一些问题
@@ -49,7 +49,7 @@ CMD ["./app"]
$ docker build -t go/helloworld:1 -f Dockerfile.one .
```
### 分散到多个 Dockerfile
### 7.17.2 分散到多个 Dockerfile
另一种方式就是我们事先在一个 `Dockerfile` 将项目及其依赖库编译测试打包好后再将其拷贝到运行环境中这种方式需要我们编写两个 `Dockerfile` 和一些编译脚本才能将其两个阶段自动整合起来这种方式虽然可以很好地规避第一种方式存在的风险但明显部署过程较复杂
@@ -118,7 +118,7 @@ go/helloworld 2 f7cf3465432c 22 seconds ago 6.47MB
go/helloworld 1 f55d3e16affc 2 minutes ago 295MB
```
## 使用多阶段构建
## 7.17 使用多阶段构建
为解决以上问题Docker v17.05 开始支持多阶段构建 (`multistage builds`)使用多阶段构建我们就可以很容易解决前面提到的问题并且只需要编写一个 `Dockerfile`
@@ -167,7 +167,7 @@ go/helloworld 1 f55d3e16affc 2 minutes ago 295MB
很明显使用多阶段构建的镜像体积小同时也完美解决了上边提到的问题
### 只构建某一阶段的镜像
### 7.17.1 只构建某一阶段的镜像
我们可以使用 `as` 来为某一阶段命名例如
@@ -181,7 +181,7 @@ FROM golang:alpine as builder
$ docker build --target builder -t username/imagename:tag .
```
### 构建时从其他镜像复制文件
### 7.17.2 构建时从其他镜像复制文件
上面例子中我们使用 `COPY --from=0 /go/src/github.com/go/helloworld/app .` 从上一阶段的镜像中复制文件我们也可以复制任意镜像中的文件

View File

@@ -2,7 +2,7 @@
> 本节适用于 PHP 开发者阅读`Laravel` 基于 8.x 版本各个版本的文件结构可能会有差异请根据实际自行修改
### 准备
### 7.18.1 准备
新建一个 `Laravel` 项目或在已有的 `Laravel` 项目根目录下新建 `Dockerfile` `.dockerignore` `laravel.conf` 文件
@@ -56,7 +56,7 @@ server {
}
```
### 前端构建
### 7.18.2 前端构建
第一阶段进行前端构建
@@ -77,7 +77,7 @@ RUN set -x ; cd /app \
&& npm run production
```
### 安装 Composer 依赖
### 7.18.3 安装 Composer 依赖
第二阶段安装 Composer 依赖
@@ -97,7 +97,7 @@ RUN set -x ; cd /app \
--prefer-dist
```
### 整合以上阶段所生成的文件
### 7.18.4 整合以上阶段所生成的文件
第三阶段对以上阶段生成的文件进行整合
@@ -123,7 +123,7 @@ RUN set -x ; cd ${LARAVEL_PATH} \
&& php artisan package:discover
```
### 最后一个阶段构建 NGINX 镜像
### 7.18.5 最后一个阶段构建 NGINX 镜像
如下代码块所示展示了相关示例
@@ -136,7 +136,7 @@ COPY laravel.conf /etc/nginx/conf.d/
COPY --from=laravel ${LARAVEL_PATH}/public ${LARAVEL_PATH}/public
```
### 构建 Laravel Nginx 镜像
### 7.18.6 构建 Laravel Nginx 镜像
使用 `docker build` 命令构建镜像
@@ -146,7 +146,7 @@ $ docker build -t my/laravel --target=laravel .
$ docker build -t my/nginx --target=nginx .
```
### 启动容器并测试
### 7.18.7 启动容器并测试
新建 Docker 网络
@@ -170,13 +170,13 @@ $ docker run -dit --rm --network=laravel -p 8080:80 my/nginx
> 也许 Laravel 项目依赖其他外部服务例如 redisMySQL请自行启动这些服务之后再进行测试本小节不再赘述
### 生产环境优化
### 7.18.8 生产环境优化
本小节内容为了方便测试将配置文件直接放到了镜像中实际在使用时 **建议** 将配置文件作为 `config` `secret` 挂载到容器中请读者自行学习 `Kubernetes` 的相关内容
由于篇幅所限本小节只是简单列出更多内容可以参考 https://github.com/khs1994-docker/laravel-demo 项目。
### 附录
### 7.18.9 附录
完整的 `Dockerfile` 文件如下

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
### 7.1.1 基本语法
如下代码块所示展示了相关示例
@@ -15,7 +15,7 @@ RUN ["executable", "param1", "param2"]
---
### 两种格式对比
### 7.1.2 两种格式对比
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -48,7 +48,7 @@ RUN ["apt-get", "update"]
---
### 常见最佳实践
### 7.1.3 常见最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -108,7 +108,7 @@ RUN wget http://url | gzip -d > file
---
### 常见问题
### 7.1.4 常见问题
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -146,7 +146,7 @@ RUN echo $MY_VAR
---
### 高级技巧
### 7.1.5 高级技巧
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
### 7.2.1 基本语法
如下代码块所示展示了相关示例
@@ -15,7 +15,7 @@ COPY [选项] ["<源路径1>", "<源路径2>", ... "<目标路径>"]
---
### 基本用法
### 7.2.2 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -69,7 +69,7 @@ src/ /app/src/
---
### 通配符规则
### 7.2.3 通配符规则
COPY 支持 Go `filepath.Match` 通配符规则
@@ -88,7 +88,7 @@ COPY app[0-9].js /app/ # app0.js ~ app9.js
---
### 目标路径
### 7.2.4 目标路径
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -122,7 +122,7 @@ COPY settings.json /app/config/
---
### 修改文件所有者
### 7.2.5 修改文件所有者
使用 `--chown` 选项设置文件的用户和组
@@ -144,7 +144,7 @@ COPY --chown=node . /app/
---
### 保留文件元数据
### 7.2.6 保留文件元数据
COPY 会保留源文件的元数据
@@ -161,7 +161,7 @@ COPY start.sh /app/
---
### COPY vs ADD
### 7.2.7 COPY vs ADD
相关信息如下表
@@ -187,7 +187,7 @@ ADD app.tar.gz /app/
---
### 多阶段构建中的 COPY
### 7.2.8 多阶段构建中的 COPY
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -229,7 +229,7 @@ COPY --link --from=builder /app/dist /usr/share/nginx/html
---
### .dockerignore
### 7.2.9 dockerignore
使用 `.dockerignore` 排除不需要复制的文件
@@ -252,7 +252,7 @@ Dockerfile
---
### 最佳实践
### 7.2.10 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
### 7.3.1 基本语法
如下代码块所示展示了相关示例
@@ -18,7 +18,7 @@ ADD [选项] ["<源路径>", ... "<目标路径>"]
---
### ADD vs COPY
### 7.3.2 ADD vs COPY
相关信息如下表
@@ -34,7 +34,7 @@ ADD [选项] ["<源路径>", ... "<目标路径>"]
---
### 自动解压功能
### 7.3.3 自动解压功能
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -83,7 +83,7 @@ app.tar.gz 包含: /app/ 目录结果:
---
### URL 下载功能 (不推荐)
### 7.3.4 URL 下载功能 (不推荐)
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -131,7 +131,7 @@ RUN curl -fsSL https://example.com/app.tar.gz | tar -xz -C /app
---
### 修改文件所有者
### 7.3.5 修改文件所有者
如下代码块所示展示了相关示例
@@ -142,7 +142,7 @@ ADD --chown=1000:1000 files/ /app/
---
### 何时使用 ADD
### 7.3.6 何时使用 ADD
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -184,7 +184,7 @@ COPY archive.tar.gz /archives/ # ✅ 保持原样
---
### 缓存行为
### 7.3.7 缓存行为
ADD 可能导致构建缓存失效
@@ -210,7 +210,7 @@ ADD app.tar.gz /app/
---
### 最佳实践
### 7.3.8 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 什么是 CMD
### 7.4.1 什么是 CMD
`CMD` 指令用于指定容器启动时默认执行的命令它定义了容器的 主进程
@@ -10,7 +10,7 @@
---
### 语法格式
### 7.4.2 语法格式
CMD 有三种格式
@@ -61,7 +61,7 @@ CMD ["sh", "-c", "echo $HOME"]
---
### exec 格式 vs shell 格式
### 7.4.3 exec 格式 vs shell 格式
相关信息如下表
@@ -98,7 +98,7 @@ CMD ["node", "server.js"]
---
### 运行时覆盖 CMD
### 7.4.4 运行时覆盖 CMD
`docker run` 后的命令会覆盖 Dockerfile 中的 CMD
@@ -120,7 +120,7 @@ CMD ["/bin/bash"] + cat /etc/os-release
---
### 经典错误容器立即退出
### 7.4.5 经典错误容器立即退出
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -164,7 +164,7 @@ CMD ["nginx", "-g", "daemon off;"]
---
### CMD vs ENTRYPOINT
### 7.4.6 CMD vs ENTRYPOINT
相关信息如下表
@@ -208,7 +208,7 @@ $ docker run myimage http://other.com # curl -s http://other.com参数覆盖
---
### 最佳实践
### 7.4.7 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -276,7 +276,7 @@ $ docker run myapp --port 9000
---
### 常见问题
### 7.4.8 常见问题
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 什么是 ENTRYPOINT
### 7.5.1 什么是 ENTRYPOINT
`ENTRYPOINT` 指定容器启动时运行的入口程序 CMD 不同ENTRYPOINT 定义的命令不会被 `docker run` 的参数覆盖而是 **接收这些参数**
@@ -10,7 +10,7 @@
---
### 语法格式
### 7.5.2 语法格式
相关信息如下表
@@ -31,7 +31,7 @@ ENTRYPOINT nginx -g "daemon off;"
---
### ENTRYPOINT vs CMD
### 7.5.3 ENTRYPOINT vs CMD
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -88,7 +88,7 @@ $ docker run myimage -v http://other.com # curl -s -v http://other.com ✓
---
### 场景一让镜像像命令一样使用
### 7.5.4 场景一让镜像像命令一样使用
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -154,7 +154,7 @@ curl -s http://myip.ipip.net -i
---
### 场景二启动前的准备工作
### 7.5.5 场景二启动前的准备工作
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -219,7 +219,7 @@ docker-entrypoint.sh redis-server docker-entrypoint.sh bash
---
### 场景三带参数的应用
### 7.5.6 场景三带参数的应用
如下代码块所示展示了相关示例
@@ -254,7 +254,7 @@ $ docker run myapp --help
---
### 覆盖 ENTRYPOINT
### 7.5.7 覆盖 ENTRYPOINT
使用 `--entrypoint` 参数覆盖
@@ -274,7 +274,7 @@ $ docker run --entrypoint /bin/cat myimage /etc/os-release
---
### ENTRYPOINT CMD 组合表
### 7.5.8 ENTRYPOINT CMD 组合表
相关信息如下表
@@ -290,7 +290,7 @@ $ docker run --entrypoint /bin/cat myimage /etc/os-release
---
### 最佳实践
### 7.5.9 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
### 7.6.1 基本语法
如下代码块所示展示了相关示例
@@ -18,7 +18,7 @@ ENV <key1>=<value1> <key2>=<value2> ...
---
### 基本用法
### 7.6.2 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -45,7 +45,7 @@ ENV NODE_VERSION=20.10.0 \
---
### 环境变量的作用
### 7.6.3 环境变量的作用
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -92,7 +92,7 @@ const dbUrl = process.env.DATABASE_URL;
---
### 支持环境变量的指令
### 7.6.4 支持环境变量的指令
以下指令可以使用 `$变量名` `${变量名}` 格式
@@ -112,7 +112,7 @@ const dbUrl = process.env.DATABASE_URL;
---
### 运行时覆盖
### 7.6.5 运行时覆盖
使用 `-e` `--env` 覆盖 Dockerfile 中定义的环境变量
@@ -148,7 +148,7 @@ DATABASE_URL=postgres://localhost/mydb
---
### ENV vs ARG
### 7.6.6 ENV vs ARG
相关信息如下表
@@ -189,7 +189,7 @@ $ docker build --build-arg NODE_VERSION=18 -t myapp .
---
### 最佳实践
### 7.6.7 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -255,7 +255,7 @@ ENV HOST=localhost \
---
### 常见问题
### 7.6.8 常见问题
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
### 7.7.1 基本语法
如下代码块所示展示了相关示例
@@ -14,7 +14,7 @@ ARG <参数名>[=<默认值>]
---
### ARG vs ENV
### 7.7.2 ARG vs ENV
相关信息如下表
@@ -37,7 +37,7 @@ ARG <参数名>[=<默认值>]
---
### 基本用法
### 7.7.3 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -72,7 +72,7 @@ $ docker build --build-arg NODE_VERSION=18 -t myapp .
---
### ARG 的作用域
### 7.7.4 ARG 的作用域
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -130,7 +130,7 @@ RUN echo "Running with Node $NODE_VERSION"
---
### 常见使用场景
### 7.7.5 常见使用场景
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -192,7 +192,7 @@ $ docker build --build-arg NPM_TOKEN=xxx .
---
### ARG 传递给 ENV
### 7.7.6 ARG 传递给 ENV
如果需要在运行时使用 ARG 的值
@@ -210,7 +210,7 @@ CMD echo "App version: $APP_VERSION"
---
### 预定义 ARG
### 7.7.7 预定义 ARG
Docker 提供了一些预定义的 ARG无需声明即可使用
@@ -229,7 +229,7 @@ $ docker build --build-arg HTTP_PROXY=http://proxy:8080 .
---
### 最佳实践
### 7.7.8 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
### 7.8.1 基本语法
如下代码块所示展示了相关示例
@@ -15,7 +15,7 @@ VOLUME /路径
---
### 为什么使用 VOLUME
### 7.8.2 为什么使用 VOLUME
> **核心原则**容器存储层应该保持无状态任何运行时数据都应该存储在卷中
@@ -45,7 +45,7 @@ flowchart LR
---
### 基本用法
### 7.8.3 基本用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -69,7 +69,7 @@ VOLUME ["/data", "/logs", "/config"]
---
### VOLUME 的行为
### 7.8.4 VOLUME 的行为
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -106,7 +106,7 @@ $ docker run -v /my/data:/var/lib/mysql mysql:8.0
---
### VOLUME 在构建时的特殊行为
### 7.8.5 VOLUME 在构建时的特殊行为
> **重要**VOLUME 之后对该目录的修改会被丢弃
@@ -143,7 +143,7 @@ VOLUME /data
---
### 常见使用场景
### 7.8.6 常见使用场景
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -176,7 +176,7 @@ VOLUME /app/uploads
---
### 查看 VOLUME 定义
### 7.8.7 查看 VOLUME 定义
运行以下命令
@@ -195,7 +195,7 @@ $ docker inspect mycontainer --format '{{json .Mounts}}' | jq
---
### VOLUME vs docker run -v
### 7.8.8 VOLUME vs docker run -v
相关信息如下表
@@ -208,7 +208,7 @@ $ docker inspect mycontainer --format '{{json .Mounts}}' | jq
---
### Compose
### 7.8.9 Compose
Compose 中配置如下
@@ -230,7 +230,7 @@ volumes:
---
### 安全注意事项
### 7.8.10 安全注意事项
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -259,7 +259,7 @@ $ docker run -v mysql_data:/var/lib/mysql mysql:8.0
---
### 最佳实践
### 7.8.11 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 基本语法
### 7.9.1 基本语法
如下代码块所示展示了相关示例
@@ -14,7 +14,7 @@ EXPOSE <端口> [<端口>/<协议>...]
---
### 基本用法
### 7.9.2 基本用法
如下代码块所示展示了相关示例
@@ -35,7 +35,7 @@ EXPOSE 53/udp
---
### EXPOSE 的作用
### 7.9.3 EXPOSE 的作用
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -74,7 +74,7 @@ $ docker port $(docker ps -q)
---
### EXPOSE vs -p
### 7.9.4 EXPOSE vs -p
相关信息如下表
@@ -117,7 +117,7 @@ $ docker run -p 8080:80 mynginx
---
### 常见误解
### 7.9.5 常见误解
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -158,7 +158,7 @@ $ docker run -p 8080:80 nginx # 2. 映射:宿主机 8080 → 容器 80
---
### 最佳实践
### 7.9.6 最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -220,7 +220,7 @@ CMD ["node", "server.js"] # 实际监听 3000
---
### 使用环境变量
### 7.9.7 使用环境变量
如下代码块所示展示了相关示例
@@ -231,7 +231,7 @@ EXPOSE $PORT
---
### Compose
### 7.9.8 Compose
Compose 中配置如下

View File

@@ -1,4 +1,4 @@
## 本章小结
## 7.19 本章小结
相关信息如下表
@@ -10,7 +10,7 @@
| **持久性** | 影响后续所有指令直到下次 WORKDIR |
| **不要用** | `RUN cd /path` (无效)|
### 延伸阅读
### 7.19.1 延伸阅读
- [COPY 复制文件](7.2_copy.md)文件复制
- [RUN 执行命令](../04_image/4.5_build.md)执行构建命令
@@ -24,7 +24,7 @@
| **运行时覆盖** | `docker run -u` |
| **切换工具** | 使用 gosu不用 su/sudo |
### 延伸阅读
### 7.19.2 延伸阅读
- [安全](../17_security/README.md)容器安全实践
- [ENTRYPOINT](7.5_entrypoint.md)入口脚本中的用户切换
@@ -38,7 +38,7 @@
| **Compose** | 支持 `condition: service_healthy` 依赖 |
| **注意** | 避免副作用节省资源 |
### 延伸阅读
### 7.19.3 延伸阅读
- [CMD 容器启动命令](7.4_cmd.md)启动主进程
- [Compose 模板文件](../10_compose/10.5_compose_file.md)Compose 中的健康检查
@@ -52,7 +52,7 @@
| **限制** | 只继承一次不可级联 |
| **规范** | 建议使用 `-onbuild` 标签后缀 |
### 延伸阅读
### 7.19.4 延伸阅读
- [COPY 指令](7.2_copy.md)文件复制
- [Dockerfile 最佳实践](../appendix/20.1_best_practices.md)基础镜像设计
@@ -65,7 +65,7 @@
| **弃用** | 不要再使用 `MAINTAINER` |
| **查看** | `docker inspect` |
### 延伸阅读
### 7.19.5 延伸阅读
- [OCI 标签规范](https://github.com/opencontainers/image-spec/blob/main/annotations.md)
- [Dockerfile 最佳实践](../appendix/20.1_best_practices.md)
@@ -78,7 +78,7 @@
| **推荐用法** | `SHELL ["/bin/bash", "-o", "pipefail", "-c"]` |
| **影响范围** | 后续所有使用 shell 格式的指令 |
### 延伸阅读
### 7.19.6 延伸阅读
- [RUN 指令](../04_image/4.5_build.md)执行命令
- [Dockerfile 最佳实践](../appendix/20.1_best_practices.md)错误处理与调试
@@ -91,7 +91,7 @@
| **陷阱** | `cd` 不持久环境变量不持久 |
| **进阶** | 使用 Cache Mount 加速构建 |
### 延伸阅读
### 7.19.7 延伸阅读
- [CMD 容器启动命令](7.4_cmd.md)容器启动时的命令
- [WORKDIR 指定工作目录](7.10_workdir.md)改变目录
@@ -105,7 +105,7 @@
| 修改所有者 | `COPY --chown=node:node . /app/` |
| 从构建阶段复制 | `COPY --from=builder /app/dist ./` |
### 延伸阅读
### 7.19.8 延伸阅读
- [ADD 指令](7.3_add.md)复制和解压
- [WORKDIR 指令](7.10_workdir.md)设置工作目录
@@ -120,7 +120,7 @@
| URL 下载 | `RUN curl` |
| 保持 tar 不解压 | `COPY` |
### 延伸阅读
### 7.19.9 延伸阅读
- [COPY 复制文件](7.2_copy.md)基本复制操作
- [多阶段构建](7.17_multistage_builds.md)减少镜像体积
@@ -134,7 +134,7 @@
| ** ENTRYPOINT** | CMD 作为 ENTRYPOINT 的默认参数 |
| **核心原则** | 应用必须在前台运行 |
### 延伸阅读
### 7.19.10 延伸阅读
- [ENTRYPOINT 入口点](7.5_entrypoint.md)固定的启动命令
- [后台运行](../05_container/5.2_daemon.md)容器前台/后台概念
@@ -146,7 +146,7 @@
| | | 简单的默认命令 |
| | | **推荐**固定命令 + 可配置参数 |
### 延伸阅读
### 7.19.11 延伸阅读
- [CMD 容器启动命令](7.4_cmd.md)默认命令
- [最佳实践](../appendix/20.1_best_practices.md)启动命令设计
@@ -160,7 +160,7 @@
| ** ARG** | ARG 仅构建时ENV 持久化到运行时 |
| **安全** | 不要存储敏感信息 |
### 延伸阅读
### 7.19.12 延伸阅读
- [ARG 构建参数](7.7_arg.md)构建时变量
- [Compose 环境变量](../10_compose/10.5_compose_file.md)Compose 中的环境变量
@@ -175,7 +175,7 @@
| **vs ENV** | ARG 仅构建时ENV 构建+运行时 |
| **安全** | 不要存储敏感信息 |
### 延伸阅读
### 7.19.13 延伸阅读
- [ENV 设置环境变量](7.6_env.md)运行时环境变量
- [FROM 指令](../04_image/4.5_build.md)基础镜像指定
@@ -189,7 +189,7 @@
| **覆盖方式** | `docker run -v name:/path` |
| **注意** | VOLUME 之后的修改会丢失 |
### 延伸阅读
### 7.19.14 延伸阅读
- [数据卷](../08_data_network/data/volume.md)卷的管理和使用
- [挂载主机目录](../08_data_network/data/bind-mounts.md)Bind Mount
@@ -203,7 +203,7 @@
| **外部访问** | 需要 `-p 宿主机端口:容器端口` |
| **语法** | `EXPOSE 80` `EXPOSE 80/tcp` |
### 延伸阅读
### 7.19.15 延伸阅读
- [网络配置](../08_data_network/network/README.md)Docker 网络详解
- [端口映射](../08_data_network/network/port_mapping.md)-p 参数详解