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 @@
Docker 镜像仓库获取镜像可谓是 Docker 运作的第一步本节将介绍如何使用 `docker pull` 命令下载镜像以及如何理解下载过程
### docker pull 命令
### 4.1.1 docker pull 命令
从镜像仓库获取镜像的命令是 `docker pull`
@@ -61,7 +61,7 @@ $ docker pull ghcr.io/username/myapp:v1.0
---
### 下载过程解析
### 4.1.2 下载过程解析
当我们执行 `docker pull` 命令时Docker 会输出详细的下载进度让我们以 `ubuntu:24.04` 为例来解析这些信息
@@ -108,7 +108,7 @@ flowchart TD
---
### 常用选项
### 4.1.3 常用选项
`docker pull` 命令支持多种选项来满足不同的下载需求例如下载所有标签指定平台架构等
@@ -132,7 +132,7 @@ $ docker pull --platform linux/amd64 nginx
---
### 拉取后运行
### 4.1.4 拉取后运行
拉取镜像后可以基于它启动容器
@@ -162,7 +162,7 @@ root@e7009c6ce357:/# exit
---
### 镜像加速
### 4.1.5 镜像加速
Docker Hub 下载可能较慢可以配置镜像加速器
@@ -190,7 +190,7 @@ $ sudo systemctl restart docker # Linux
---
### 验证镜像完整性
### 4.1.6 验证镜像完整性
为了确保下载的镜像没有被篡改且内容一致我们可以校验镜像的摘要 (Digest)
@@ -216,7 +216,7 @@ $ docker pull ubuntu@sha256:4bc3ae6596938cb0d9e5ac51a1152ec9dcac2a1c50829c74abd9
---
### 常见问题
### 4.1.7 常见问题
在使用 `docker pull` 过程中可能会遇到下载速度慢镜像不存在或磁盘空间不足等问题以下是一些常见问题的排查思路

View File

@@ -2,7 +2,7 @@
在下载了镜像后我们可以使用 `docker image ls` 命令列出本地主机上的镜像
### 基本用法
### 4.2.1 基本用法
查看本地已下载的镜像
@@ -19,7 +19,7 @@ ubuntu noble 329ed837d508 3 days ago 78MB
---
### 输出字段说明
### 4.2.2 输出字段说明
`docker image ls` 命令默认输出的列表包含仓库名标签镜像 ID创建时间和占用空间等信息
@@ -41,7 +41,7 @@ ubuntu noble 329ed837d508 3 days ago 78MB
---
### 理解镜像大小
### 4.2.3 理解镜像大小
Docker 镜像的大小可能与我们通常理解的文件大小有所不同这涉及到分层存储的概念
@@ -83,7 +83,7 @@ Build Cache 0 0 0B 0B
---
### 过滤镜像
### 4.2.4 过滤镜像
随着本地镜像数量的增加我们需要更有效的方式来查找特定的镜像Docker 提供了多种过滤方式
@@ -139,7 +139,7 @@ $ docker images -f label=maintainer=example@email.com
---
### 虚悬镜像
### 4.2.5 虚悬镜像
在镜像列表里你可能会看到一些仓库名和标签都为 `<none>` 的镜像这类镜像被称为虚悬镜像
@@ -174,7 +174,7 @@ $ docker image prune
---
### 中间层镜像
### 4.2.6 中间层镜像
除了虚悬镜像`docker image ls` 默认列出的只是顶层镜像还有一种镜像是为了加速镜像构建重复利用资源而存在的中间层镜像
@@ -196,7 +196,7 @@ $ docker images -a
---
### 格式化输出
### 4.2.7 格式化输出
为了配合脚本使用或展示更关注的信息我们可以使用 `--format` 参数来自定义输出格式
@@ -278,7 +278,7 @@ ubuntu 24.04 78MB
---
### 常用命令组合
### 4.2.8 常用命令组合
运行以下命令

View File

@@ -2,7 +2,7 @@
当不再需要某个镜像时我们可以将其删除以释放存储空间本节介绍删除镜像的常用方法
### 基本用法
### 4.3.1 基本用法
使用 `docker image rm` 删除本地镜像
@@ -14,7 +14,7 @@ $ docker image rm [选项] <镜像1> [<镜像2> ...]
---
### 镜像标识方式
### 4.3.2 镜像标识方式
删除镜像时可以使用多种方式指定镜像
@@ -70,7 +70,7 @@ $ docker rmi nginx@sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b1
---
### 理解输出信息
### 4.3.3 理解输出信息
执行删除命令后Docker 会输出一系列的操作记录理解这些信息有助于我们掌握镜像删除的机制
@@ -122,7 +122,7 @@ flowchart TD
---
### 批量删除
### 4.3.4 批量删除
手动一个一个删除镜像非常繁琐Docker 提供了 `image prune` 命令和 shell 组合命令来实现批量清理
@@ -178,7 +178,7 @@ $ docker image prune -a --filter "until=168h" # 7天前
---
### 删除失败的常见原因
### 4.3.5 删除失败的常见原因
在删除镜像时Docker 可能会提示错误并拒绝执行这通常是为了防止误删正在使用的资源
@@ -236,7 +236,7 @@ Error: image has dependent child images
---
### 常用过滤条件
### 4.3.6 常用过滤条件
相关信息如下表
@@ -250,7 +250,7 @@ Error: image has dependent child images
---
### 清理策略
### 4.3.7 清理策略
针对不同的环境 (开发环境 vs 生产环境)我们应该采用不同的镜像清理策略

View File

@@ -120,11 +120,11 @@ docker run --name web2 -d -p 81:80 nginx:v2
至此我们第一次完成了定制镜像使用的是 `docker commit` 命令手动操作给旧的镜像添加了新的一层形成新的镜像对镜像多层存储应该有了更直观的感觉
### 概述
### 4.4.1 概述
总体概述了以下内容
### 慎用 `docker commit`
### 4.4.2 慎用 `docker commit`
使用 `docker commit` 命令虽然可以比较直观的帮助理解镜像分层存储的概念但是实际环境中并不会这样使用

View File

@@ -4,7 +4,7 @@
Dockerfile 是一个文本文件其内包含了一条条的 **指令 (Instruction)**每一条指令构建一层因此每一条指令的内容就是描述该层应当如何构建
### 使用 docker init 快速创建 (推荐)
### 4.5.1 使用 docker init 快速创建 (推荐)
Docker 提供了 `docker init` 命令可以根据项目类型自动生成 Dockerfiledockerignore compose.yaml 文件
@@ -14,7 +14,7 @@ $ docker init
该命令会交互式地询问项目类型 ( GoNode.jsPythonRust )并生成符合最佳实践的配置文件对于新项目这是推荐的起步方式
### 手动创建 Dockerfile
### 4.5.2 手动创建 Dockerfile
还以之前定制 `nginx` 镜像为例这次我们使用 Dockerfile 来定制
@@ -35,7 +35,7 @@ RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
这个 Dockerfile 很简单一共就两行涉及到了两条指令`FROM` `RUN`
### FROM 指定基础镜像
### 4.5.3 FROM 指定基础镜像
所谓定制镜像那一定是以一个镜像为基础在其上进行定制就像我们之前运行了一个 `nginx` 镜像的容器再进行修改一样基础镜像是必须指定的 `FROM` 就是指定 **基础镜像**因此一个 `Dockerfile` `FROM` 是必备的指令并且必须是第一条指令
@@ -54,7 +54,7 @@ FROM scratch
不以任何系统为基础直接将可执行文件复制进镜像的做法并不罕见对于 Linux 下静态编译的程序来说并不需要有操作系统提供运行时支持所需的一切库都已经在可执行文件里了因此直接 `FROM scratch` 会让镜像体积更加小巧使用 [Go 语言](https://golang.google.cn/)开发的应用很多会使用这种方式来制作镜像,这也是有人认为 Go 是特别适合容器微服务架构的语言的原因之一。
### RUN 执行命令
### 4.5.4 RUN 执行命令
`RUN` 指令是用来执行命令行命令的由于命令行的强大能力`RUN` 指令在定制镜像时是最常用的指令之一其格式有两种
@@ -76,7 +76,7 @@ Dockerfile 中每一个指令都会建立一层,`RUN` 也不例外。每一个
要想编写优秀的 `Dockerfile`必须了解每一条指令的作用和副作用 **[第七章 Dockerfile 指令详解](../07_dockerfile/README.md)** 我们将对 `COPY``ADD``CMD``ENTRYPOINT` 等指令进行详细讲解
### 构建镜像
### 4.5.5 构建镜像
好了让我们再回到之前定制的 nginx 镜像的 Dockerfile 现在我们明白了这个 Dockerfile 的内容那么让我们来构建这个镜像吧
@@ -104,7 +104,7 @@ docker build [选项] <上下文路径/URL/->
在这里我们指定了最终镜像的名称 `-t nginx:v3`构建成功后我们可以像之前运行 `nginx:v2` 那样来运行这个镜像其结果会和 `nginx:v2` 一样
### 镜像构建上下文
### 4.5.6 镜像构建上下文
如果注意会看到 `docker build` 命令最后有一个 `.``.` 表示当前目录 `Dockerfile` 就在当前目录因此不少初学者以为这个路径是在指定 `Dockerfile` 所在路径这么理解其实是不准确的如果对应上面的命令格式你可能会发现这是在指定 **上下文路径**那么什么是上下文呢
@@ -144,7 +144,7 @@ Sending build context to Docker daemon 2.048 kB
当然一般大家习惯性的会使用默认的文件名 `Dockerfile`以及会将其置于镜像构建上下文目录中
### 其它 `docker build` 的用法
### 4.5.7 其它 `docker build` 的用法
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -2,7 +2,7 @@
除了标准的使用 `Dockerfile` 生成镜像的方法外由于各种特殊需求和历史原因还提供了一些其它方法用以生成镜像
### rootfs 压缩包导入
### 4.6.1 rootfs 压缩包导入
格式`docker import [选项] <文件>|<URL>|- [<仓库名>[:<标签>]]`
@@ -37,7 +37,7 @@ IMAGE CREATED CREATED BY SIZE
f477a6e18e98 About a minute ago 214.9 MB Imported from http://download.openvz.org/template/precreated/ubuntu-16.04-x86_64.tar.gz
```
### Docker 镜像的导入和导出 `docker save` `docker load`
### 4.6.2 Docker 镜像的导入和导出 `docker save` `docker load`
Docker 还提供了 `docker save` `docker load` 命令用以将镜像保存为一个文件然后传输到另一个位置上再加载进来这是在没有 Docker Registry 时的做法现在已经不推荐镜像迁移应该直接使用 Docker Registry无论是直接使用 Docker Hub 还是使用内网私有 Registry 都可以

View File

@@ -2,7 +2,7 @@
Docker 镜像是怎么实现增量的修改和维护的为什么容器启动如此之快这一切都归功于 Docker 的镜像分层存储设计
### 镜像与分层存储
### 4.7.1 镜像与分层存储
在之前的章节中我们一直强调镜像包含操作系统完整的 `root` 文件系统其体积往往是庞大的因此在 Docker 设计时就充分利用 **Union FS** 的技术将其设计为分层存储的架构
@@ -17,7 +17,7 @@ Docker 镜像并不是一个单纯的文件,而是由一组文件系统叠加
* **复用**如果多个镜像都基于同一个基础镜像 (例如都基于 `ubuntu:24.04`)那么宿主机只需要下载一份 `ubuntu:24.04`所有镜像都可以共享它
* **轻量**镜像仅仅记录了与基础镜像的差异因此体积非常小
### 容器层与读写
### 4.7.2 容器层与读写
我们要理解的一个关键概念是**镜像的每一层都是只读的 (Read-only)**
@@ -48,7 +48,7 @@ flowchart TD
1. **容器删除后数据会丢失**因为所有的数据修改都保存在最上层的容器层中容器销毁时这个层也就随之销毁了(除非使用了数据卷详见[数据管理](../08_data_network/README.md))
2. **镜像不可变**无论我们在容器里删除了多少文件基础镜像的体积并不会减小因为它们依然存在于底层的只读层中
### 内容寻址与镜像 ID
### 4.7.3 内容寻址与镜像 ID
Docker 镜像的每一层都有一个唯一的 ID这个 ID 是根据该层的内容计算出来的哈希值 (SHA256)这意味着
@@ -56,7 +56,7 @@ Docker 镜像的每一层都有一个唯一的 ID这个 ID 是根据该层的
* **安全性**确保了镜像内容的完整性下载过程中如果数据损坏ID 校验就会失败
* **去重**如果两个不同的镜像 (甚至是不同来源的镜像) 包含相同的层 (ID 相同)Docker 引擎在本地只会存储一份绝不重复下载
### 联合文件系统
### 4.7.4 联合文件系统
Docker 使用联合文件系统 (Union FS) 来实现这种分层挂载常见的驱动包括 `overlay2` (目前推荐)`aufs` (早期使用)`btrfs``zfs`

View File

@@ -1,4 +1,4 @@
## 本章小结
## 4.8 本章小结
相关信息如下表
@@ -9,7 +9,7 @@
| 指定平台 | `docker pull --platform linux/amd64 镜像名` |
| 用摘要拉取 | `docker pull 镜像名@sha256:...` |
### 延伸阅读
### 4.8.1 延伸阅读
- [列出镜像](4.2_list.md)查看本地镜像
- [删除镜像](4.3_rm.md)清理本地镜像
@@ -26,7 +26,7 @@
| 自定义格式 | `docker images --format "..."` |
| 查看空间占用 | `docker system df` |
### 延伸阅读
### 4.8.2 延伸阅读
- [获取镜像](4.1_pull.md) Registry 拉取镜像
- [删除镜像](4.3_rm.md)清理本地镜像
@@ -41,7 +41,7 @@
| 批量删除 | `docker rmi $(docker images -q -f ...)` |
| 查看空间占用 | `docker system df` |
### 延伸阅读
### 4.8.3 延伸阅读
- [列出镜像](4.2_list.md)查看和过滤镜像
- [删除容器](../05_container/5.6_rm.md)清理容器