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

@@ -10,11 +10,11 @@
`Compose` 恰好满足了这样的需求它允许用户通过一个单独的 `compose.yaml` (历史默认名也常见为 `docker-compose.yml`) 模板文件 (YAML 格式) 来定义一组相关联的应用容器为一个项目 (project)
### 概述
### 10.1.1 概述
总体概述了以下内容
### 模板文件规范
### 10.1.2 模板文件规范
Compose 模板文件采用 YAML 格式扩展名为 `.yml` `.yaml`

View File

@@ -10,7 +10,7 @@
Linux 系统请使用以下介绍的方法安装
### Linux
### 10.2.1 Linux
Linux 你可以通过下载 Docker Compose CLI 插件 (二进制文件名为 `docker-compose`) 来安装
@@ -32,7 +32,7 @@ $ curl -SL https://github.com/docker/compose/releases/download/v5.0.2/docker-com
$ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
```
### 测试安装
### 10.2.2 测试安装
运行以下命令
@@ -41,7 +41,7 @@ $ docker compose version
Docker Compose version v5.0.2
```
### bash 补全命令
### 10.2.3 bash 补全命令
运行以下命令
@@ -49,7 +49,7 @@ Docker Compose version v5.0.2
$ curl -L https://raw.githubusercontent.com/docker/compose/v5.0.2/contrib/completion/bash/docker-compose | sudo tee /etc/bash_completion.d/docker-compose > /dev/null
```
### 卸载
### 10.2.4 卸载
如果是二进制包方式安装的删除二进制文件即可

View File

@@ -2,7 +2,7 @@
本节将通过一个具体的 Web 应用案例介绍 Docker Compose 的基本概念和使用方法
### 术语
### 10.3.1 术语
首先介绍几个术语
@@ -12,7 +12,7 @@
可见一个项目可以由多个服务 (容器) 关联而成`Compose` 面向项目进行管理
### 场景
### 10.3.2 场景
最常见的项目是 web 网站该项目应该包含 web 应用和缓存

View File

@@ -2,7 +2,7 @@
Docker Compose 提供了丰富的命令来管理项目和容器本节将详细介绍这些命令的使用格式和常用选项
### 命令对象与格式
### 10.4.1 命令对象与格式
对于 Compose 来说大部分命令的对象既可以是项目本身也可以指定为项目中的服务或者容器如果没有特别的说明命令对象将是项目这意味着项目中所有的服务都会受到命令影响
@@ -14,7 +14,7 @@ Docker Compose 提供了丰富的命令来管理项目和容器。本节将详
docker compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
```
### 命令选项
### 10.4.2 命令选项
* `-f, --file FILE` 指定使用的 Compose 模板文件默认会自动识别 `compose.yaml` (也兼容 `docker-compose.yml` )并且可以多次指定
@@ -24,7 +24,7 @@ docker compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
* `-v, --version` 打印版本并退出
### 命令使用说明
### 10.4.3 命令使用说明
本节涵盖了相关内容与详细描述主要探讨以下几个方面

View File

@@ -20,7 +20,7 @@ services:
下面分别介绍各个指令的用法
### `build`
### 10.5.1 `build`
指定 `Dockerfile` 所在文件夹的路径 (可以是绝对路径或者相对 Compose 文件的路径)`Compose` 将会利用它自动构建这个镜像然后使用这个镜像
@@ -56,7 +56,7 @@ build:
- corp/web_app:3.14
```
### `cap_add, cap_drop`
### 10.5.2 `cap_add, cap_drop`
指定容器的内核能力 (capacity) 分配
@@ -74,7 +74,7 @@ cap_drop:
- NET_ADMIN
```
### `command`
### 10.5.3 `command`
覆盖容器启动后默认执行的命令
@@ -82,11 +82,11 @@ cap_drop:
command: echo "hello world"
```
### `configs`
### 10.5.4 `configs`
`configs` 来自 Compose Specification它在 Swarm 中是原生对象在本地 `docker compose` 模式下通常以文件挂载的形式实现具体能力取决于 Compose 版本与运行平台
### `cgroup_parent`
### 10.5.5 `cgroup_parent`
指定父 `cgroup` 意味着将继承该组的资源限制
@@ -96,7 +96,7 @@ command: echo "hello world"
cgroup_parent: cgroups_1
```
### `container_name`
### 10.5.6 `container_name`
指定容器名称默认将会使用 `项目名称_服务名称_序号` 这样的格式
@@ -106,11 +106,11 @@ container_name: docker-web-container
>注意指定容器名称后该服务将无法进行扩展 (scale)因为 Docker 不允许多个容器具有相同的名称
### `deploy`
### 10.5.7 `deploy`
`deploy` 用于描述副本数更新策略资源限制等部署参数该字段在 Swarm 中支持最完整在本地 `docker compose up` 场景下通常只有部分字段生效
### `devices`
### 10.5.8 `devices`
指定设备映射关系
@@ -119,7 +119,7 @@ devices:
- "/dev/ttyUSB1:/dev/ttyUSB0"
```
### `depends_on`
### 10.5.9 `depends_on`
解决容器的依赖启动先后的问题以下例子中会先启动 `redis` `db` 再启动 `web`
@@ -140,7 +140,7 @@ services:
>注意`web` 服务不会等待 `redis` `db` 完全启动 之后才启动
### `dns`
### 10.5.10 `dns`
自定义 `DNS` 服务器可以是一个值也可以是一个列表
@@ -152,7 +152,7 @@ dns:
- 114.114.114.114
```
### `dns_search`
### 10.5.11 `dns_search`
配置 `DNS` 搜索域可以是一个值也可以是一个列表
@@ -164,7 +164,7 @@ dns_search:
- domain2.example.com
```
### `tmpfs`
### 10.5.12 `tmpfs`
挂载一个 tmpfs 文件系统到容器
@@ -175,7 +175,7 @@ tmpfs:
- /tmp
```
### `env_file`
### 10.5.13 `env_file`
从文件中获取环境变量可以为单独的文件路径或列表
@@ -200,7 +200,7 @@ env_file:
PROG_ENV=development
```
### `environment`
### 10.5.14 `environment`
设置环境变量你可以使用数组或字典两种格式
@@ -222,7 +222,7 @@ environment:
y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
```
### `expose`
### 10.5.15 `expose`
暴露端口但不映射到宿主机只被连接的服务访问
@@ -234,7 +234,7 @@ expose:
- "8000"
```
### `external_links`
### 10.5.16 `external_links`
>注意不建议使用该指令
@@ -247,7 +247,7 @@ external_links:
- project_db_1:postgresql
```
### `extra_hosts`
### 10.5.17 `extra_hosts`
类似 Docker 中的 `--add-host` 参数指定额外的 host 名称映射信息
@@ -264,7 +264,7 @@ extra_hosts:
52.1.157.61 dockerhub
```
### `healthcheck`
### 10.5.18 `healthcheck`
通过命令检查容器是否健康运行
@@ -276,7 +276,7 @@ healthcheck:
retries: 3
```
### `image`
### 10.5.19 `image`
指定为镜像名称或镜像 ID如果镜像在本地不存在`Compose` 将会尝试拉取这个镜像
@@ -286,7 +286,7 @@ image: orchardup/postgresql
image: a4bc65fd
```
### `labels`
### 10.5.20 `labels`
为容器添加 Docker 元数据 (metadata) 信息例如可以为容器添加辅助说明信息
@@ -297,11 +297,11 @@ labels:
com.startupteam.release: "rc3 for v1.0"
```
### `links`
### 10.5.21 `links`
>注意不推荐使用该指令容器之间应通过 Docker 网络 (networks) 进行互联
### `logging`
### 10.5.22 `logging`
配置日志选项
@@ -328,7 +328,7 @@ options:
max-file: "10"
```
### `network_mode`
### 10.5.23 `network_mode`
设置网络模式使用和 `docker run` `--network` 参数一样的值
@@ -340,7 +340,7 @@ network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
```
### `networks`
### 10.5.24 `networks`
配置容器连接的网络
@@ -358,7 +358,7 @@ networks:
other-network:
```
### `pid`
### 10.5.25 `pid`
跟主机系统共享进程命名空间打开该选项的容器之间以及容器和宿主机系统之间可以通过进程 ID 来相互访问和操作
@@ -366,7 +366,7 @@ networks:
pid: "host"
```
### `ports`
### 10.5.26 `ports`
暴露端口信息
@@ -382,7 +382,7 @@ ports:
*注意当使用 `HOST:CONTAINER` 格式来映射端口时如果你使用的容器端口小于 60 并且没放到引号里可能会得到错误结果因为 `YAML` 会自动解析 `xx:yy` 这种数字格式为 60 进制为避免出现这种问题建议数字串都采用引号包括起来的字符串格式*
### `secrets`
### 10.5.27 `secrets`
存储敏感数据例如 `mysql` 服务密码
@@ -405,7 +405,7 @@ secrets:
external: true
```
### `security_opt`
### 10.5.28 `security_opt`
指定容器模板标签 (label) 机制的默认属性 (用户角色类型级别等)例如配置标签的用户名和角色名
@@ -415,7 +415,7 @@ security_opt:
- label:role:ROLE
```
### `stop_signal`
### 10.5.29 `stop_signal`
设置另一个信号来停止容器在默认情况下使用的是 SIGTERM 停止容器
@@ -423,7 +423,7 @@ security_opt:
stop_signal: SIGUSR1
```
### `sysctls`
### 10.5.30 `sysctls`
配置容器内核参数
@@ -437,7 +437,7 @@ sysctls:
- net.ipv4.tcp_syncookies=0
```
### `ulimits`
### 10.5.31 `ulimits`
指定容器的 ulimits 限制值
@@ -451,7 +451,7 @@ sysctls:
hard: 40000
```
### `volumes`
### 10.5.32 `volumes`
数据卷所挂载路径设置可以设置为宿主机路径 (`HOST:CONTAINER`) 或者数据卷名称 (`VOLUME:CONTAINER`)并且可以设置访问模式 (`HOST:CONTAINER:ro`)
@@ -477,7 +477,7 @@ volumes:
mysql_data:
```
### 其它指令
### 10.5.33 其它指令
此外还有包括 `domainname, entrypoint, hostname, ipc, mac_address, privileged, read_only, shm_size, restart, stdin_open, tty, user, working_dir` 等指令基本跟 `docker run` 中对应参数的功能一致
@@ -537,7 +537,7 @@ stdin_open: true
tty: true
```
### 读取变量
### 10.5.34 读取变量
Compose 模板文件支持动态读取主机的系统环境变量和当前目录下的 `.env` 文件中的变量

View File

@@ -4,7 +4,7 @@
本节将使用 Docker Compose 配置并运行一个 **Django + PostgreSQL** 应用笔者不仅会介绍具体步骤还会解释每个配置项的作用以及开发环境和生产环境的差异
### 架构概览
### 10.6.1 架构概览
在开始之前先看整体架构 (如图 10-1 所示)
@@ -40,7 +40,7 @@ flowchart TD
- 两个服务通过 Docker Compose 自动创建的网络相互通信
- `web` 服务可以通过服务名 `db` 访问数据库 (Docker 内置 DNS)
### 准备工作
### 10.6.2 准备工作
创建一个项目目录并进入
@@ -50,7 +50,7 @@ $ mkdir django-docker && cd django-docker
我们需要创建三个文件`Dockerfile``requirements.txt` `compose.yaml`
### 步骤 1创建 Dockerfile
### 10.6.3 步骤 1创建 Dockerfile
如下代码块所示展示了相关示例
@@ -90,7 +90,7 @@ COPY . /code/
> 💡 **笔者建议**总是将变化频率低的文件先复制变化频率高的后复制这样可以最大化利用 Docker 的构建缓存
### 步骤 2创建 requirements.txt
### 10.6.4 步骤 2创建 requirements.txt
如下代码块所示展示了相关示例
@@ -108,7 +108,7 @@ gunicorn>=21.0,<22.0
| `psycopg[binary]` | PostgreSQL 数据库驱动 (推荐使用 psycopg 3)|
| `gunicorn` | 生产环境 WSGI 服务器 (可选开发时可不用)|
### 步骤 3创建 compose.yaml
### 10.6.5 步骤 3创建 compose.yaml
配置如下
@@ -192,7 +192,7 @@ web:
| `depends_on` + `healthcheck` | 启动顺序 | 确保数据库就绪后 Django 才启动避免连接错误 |
| `environment` | 环境变量 | 推荐用环境变量管理配置避免硬编码 |
### 步骤 4创建 Django 项目
### 10.6.6 步骤 4创建 Django 项目
运行以下命令创建新的 Django 项目
@@ -225,7 +225,7 @@ django-docker/
> 💡 **Linux 用户注意**如果遇到权限问题执行 `sudo chown -R $USER:$USER .`
### 步骤 5配置数据库连接
### 10.6.7 步骤 5配置数据库连接
修改 `mysite/settings.py`配置数据库连接
@@ -252,7 +252,7 @@ ALLOWED_HOSTS = ['*']
Docker Compose 各服务通过服务名相互访问Docker 内置的 DNS 会将 `db` 解析为 db 服务容器的 IP 地址这是 Docker Compose 的核心功能之一
### 步骤 6启动应用
### 10.6.8 步骤 6启动应用
运行以下命令
@@ -275,7 +275,7 @@ web-1 | Starting development server at http://0.0.0.0:8000/
打开浏览器访问 http://localhost:8000可以看到 Django 欢迎页面!
### 常用开发命令
### 10.6.9 常用开发命令
在另一个终端窗口执行
@@ -299,7 +299,7 @@ $ docker compose exec db psql -U django_user -d django_db
> 💡 笔者建议使用 `exec` 而不是 `run``exec` 在已运行的容器中执行命令`run` 会创建新容器
### 常见问题排查
### 10.6.10 常见问题排查
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -338,7 +338,7 @@ $ docker compose logs db
$ sudo chown -R $USER:$USER .
```
### 开发 vs 生产关键差异
### 10.6.11 开发 vs 生产关键差异
笔者特别提醒本节的配置是 **开发环境** 配置生产环境需要以下调整
@@ -366,7 +366,7 @@ services:
```
### 延伸阅读
### 10.6.12 延伸阅读
- [Compose 模板文件详解](10.5_compose_file.md)深入理解 Compose 文件的所有配置项
- [使用 WordPress](10.8_wordpress.md)另一个 Compose 实战案例

View File

@@ -4,7 +4,7 @@
本节使用 Docker Compose 配置并运行一个 **Rails + PostgreSQL** 应用
### 架构概览
### 10.7.1 架构概览
如图 10-2 所示Rails PostgreSQL 在同一 Compose 网络中协同工作
@@ -33,7 +33,7 @@ flowchart TD
10-2 Rails + PostgreSQL Compose 架构
### 准备工作
### 10.7.2 准备工作
创建项目目录
@@ -43,7 +43,7 @@ $ mkdir rails-docker && cd rails-docker
需要创建三个文件`Dockerfile``Gemfile` `compose.yaml`
### 步骤 1创建 Dockerfile
### 10.7.3 步骤 1创建 Dockerfile
如下代码块所示展示了相关示例
@@ -80,7 +80,7 @@ COPY . /myapp
| `nodejs` | Rails Asset Pipeline 需要 |
| 先复制 Gemfile | 只有依赖变化时才重新 `bundle install` |
### 步骤 2创建 Gemfile
### 10.7.4 步骤 2创建 Gemfile
创建一个初始的 `Gemfile`稍后会被 `rails new` 覆盖
@@ -95,7 +95,7 @@ gem 'rails', '~> 7.1'
$ touch Gemfile.lock
```
### 步骤 3创建 compose.yaml
### 10.7.5 步骤 3创建 compose.yaml
配置如下
@@ -133,7 +133,7 @@ volumes:
| `depends_on: db` | 确保数据库先启动 |
| `DATABASE_URL` | Rails 12-factor 风格的数据库配置 |
### 步骤 4生成 Rails 项目
### 10.7.6 步骤 4生成 Rails 项目
使用 `docker compose run` 生成项目骨架
@@ -160,7 +160,7 @@ compose.yaml bin db public
> **Linux 用户**如遇权限问题执行 `sudo chown -R $USER:$USER .`
### 步骤 5重新构建镜像
### 10.7.7 步骤 5重新构建镜像
由于生成了新的 Gemfile需要重新构建镜像以安装完整依赖
@@ -168,7 +168,7 @@ compose.yaml bin db public
$ docker compose build
```
### 步骤 6配置数据库连接
### 10.7.8 步骤 6配置数据库连接
修改 `config/database.yml`
@@ -192,7 +192,7 @@ production:
> 💡 使用 `DATABASE_URL` 环境变量配置数据库符合 12-factor 应用原则便于在不同环境间切换
### 步骤 7启动应用
### 10.7.9 步骤 7启动应用
运行以下命令
@@ -212,7 +212,7 @@ web-1 | Puma starting in single mode...
web-1 | * Listening on http://0.0.0.0:3000
```
### 步骤 8创建数据库
### 10.7.10 步骤 8创建数据库
在另一个终端执行
@@ -224,7 +224,7 @@ Created database 'myapp_test'
访问 http://localhost:3000 查看 Rails 欢迎页面。
### 常用开发命令
### 10.7.11 常用开发命令
运行以下命令
@@ -250,7 +250,7 @@ $ docker compose exec web rails generate scaffold Post title:string body:text
$ docker compose exec web bash
```
### 常见问题
### 10.7.12 常见问题
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -281,7 +281,7 @@ $ docker compose exec web rm -f tmp/pids/server.pid
$ docker compose run --rm web bundle update
```
### 开发 vs 生产
### 10.7.13 开发 vs 生产
相关信息如下表
@@ -292,7 +292,7 @@ $ docker compose run --rm web bundle update
| 静态资源 | 动态编译 | 预编译 (`rails assets:precompile`) |
| 数据库密码 | 明文配置 | 使用 Secrets 管理 |
### 延伸阅读
### 10.7.14 延伸阅读
- [使用 Django](10.6_django.md)Python Web 框架实战
- [Compose 模板文件](10.5_compose_file.md)配置详解

View File

@@ -4,7 +4,7 @@ WordPress 是全球最流行的内容管理系统 (CMS)。使用 Docker Compose
---
### 项目结构
### 10.8.1 项目结构
如下代码块所示展示了相关示例
@@ -18,7 +18,7 @@ wordpress/
---
### 编写 `compose.yaml`
### 10.8.2 编写 `compose.yaml`
这是一个生产可用的最小化配置
@@ -79,7 +79,7 @@ networks:
---
### 配置文件详解
### 10.8.3 配置文件详解
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -115,7 +115,7 @@ max_execution_time = 600
---
### 启动与运行
### 10.8.4 启动与运行
1. 启动服务
@@ -134,7 +134,7 @@ $ docker compose logs -f
---
### 生产环境最佳实践
### 10.8.5 生产环境最佳实践
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -192,7 +192,7 @@ WordPress 支持 Redis 缓存以提高性能。
---
### 常见问题
### 10.8.6 常见问题
本节涵盖了相关内容与详细描述主要探讨以下几个方面
@@ -214,7 +214,7 @@ $ docker compose restart wordpress
---
### 延伸阅读
### 10.8.7 延伸阅读
- [Compose 模板文件](10.5_compose_file.md)深入了解配置项
- [数据卷](../08_data_network/data/volume.md)理解数据持久化