From 51698c89c54978bb3a017e99e04026c4e6559355 Mon Sep 17 00:00:00 2001 From: yeasy Date: Thu, 16 Jul 2026 23:20:25 -0700 Subject: [PATCH] fix(content): correct verified internal inconsistencies across 7 sections MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 均为书内自证的矛盾,无需外部来源: - 19.3: golang:1.26-alpine 标注为 ~1GB,但 21.7 将 ~900MB 归给非 alpine 的 golang:1.26,且 7.17 实测 alpine 版镜像为 295MB——alpine 变体不可能大于其 非 alpine 版本。改为与 21.7 一致的「golang:1.26 基础镜像的 ~900MB」。 - 20_cases_os: 正文称通用镜像 100-300 MB,紧邻的表格却列 Ubuntu ~80 MB (与 4.2 的 ubuntu 24.04 78MB 一致)。正文改为 80-300 MB。 - 4.2: 「查找大于 500MB 的镜像」的 ^[0-9]+GB 不匹配小数,会漏掉 docker 实际 输出的全部 x.yGB(本书自己的示例即为 2.5GB)。补充可选小数部分。 - 6.2: docker image ls 示例输出把 tag 混入 REPOSITORY 列 (127.0.0.1:5000/ubuntu:latest + TAG latest),与同块 ubuntu/latest 行及 本节自述的 tag 格式不符。 - 5.3: 生命周期状态图缺 Stopped --> Running,而 5.3.6 正是讲 docker start 启动已停止的容器;原图中停止的容器只能被删除。 - 9.5: 端口映射图节点标签 "容器 (Class B: 80)" 语义错乱(Class B 是 IP 地址 分类,与端口无关),改为「容器 (端口: 80)」。 - appendix/faq/errors.md: 标题「常见错误速查表」与 SUMMARY.md 及 faq/README 两处链接文字「常见错误处理」不一致(全书 196 篇中唯一一处标题漂移)。 --- 04_image/4.2_list.md | 2 +- 05_container/5.3_stop.md | 1 + 06_repository/6.2_registry.md | 4 ++-- 09_network/9.5_port_mapping.md | 2 +- 19_observability/19.3_performance_optimization.md | 2 +- 20_cases_os/README.md | 2 +- appendix/faq/errors.md | 2 +- 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/04_image/4.2_list.md b/04_image/4.2_list.md index 821b203..670bdc4 100644 --- a/04_image/4.2_list.md +++ b/04_image/4.2_list.md @@ -252,7 +252,7 @@ $ docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | sort -h ## 查找大于 500MB 的镜像 -$ docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | grep -E "^[0-9]+GB|^[5-9][0-9]{2}MB" +$ docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | grep -E "^[0-9]+(\.[0-9]+)?GB|^[5-9][0-9]{2}MB" ## 导出镜像列表 diff --git a/05_container/5.3_stop.md b/05_container/5.3_stop.md index 36b183b..b044c00 100644 --- a/05_container/5.3_stop.md +++ b/05_container/5.3_stop.md @@ -153,6 +153,7 @@ stateDiagram-v2 [*] --> Created : docker create Created --> Running : docker start Running --> Stopped : docker stop + Stopped --> Running : docker start Running --> Paused : docker pause Paused --> Running : docker unpause diff --git a/06_repository/6.2_registry.md b/06_repository/6.2_registry.md index dccf96e..86227fc 100644 --- a/06_repository/6.2_registry.md +++ b/06_repository/6.2_registry.md @@ -48,7 +48,7 @@ $ docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest $ docker image ls REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB -127.0.0.1:5000/ubuntu:latest latest ba5877dc9bec 6 weeks ago 192.7 MB +127.0.0.1:5000/ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB ``` 使用 `docker push` 上传标记的镜像。 @@ -87,7 +87,7 @@ ebc34468f71d: Download complete $ docker image ls REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE -127.0.0.1:5000/ubuntu:latest latest ba5877dc9bec 6 weeks ago 192.7 MB +127.0.0.1:5000/ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB ``` ### 6.2.3 配置非 https 仓库地址 diff --git a/09_network/9.5_port_mapping.md b/09_network/9.5_port_mapping.md index 29c39c7..a251f76 100644 --- a/09_network/9.5_port_mapping.md +++ b/09_network/9.5_port_mapping.md @@ -16,7 +16,7 @@ flowchart TD User["外部用户 (Browser)"] --> Host["宿主机 (localhost:8080)"] Host --> Proxy["Docker Proxy
端口映射 (8080 -> 80)"] - Proxy --> Container["容器 (Class B: 80)"] + Proxy --> Container["容器 (端口: 80)"] ``` --- diff --git a/19_observability/19.3_performance_optimization.md b/19_observability/19.3_performance_optimization.md index 9a2ead8..2d6f4e6 100644 --- a/19_observability/19.3_performance_optimization.md +++ b/19_observability/19.3_performance_optimization.md @@ -457,7 +457,7 @@ COPY --from=builder /build/app /app EXPOSE 8080 ENTRYPOINT ["/app"] -# 最终镜像大小通常 < 15MB(相比 golang:1.26-alpine 的 ~1GB) +# 最终镜像大小通常 < 15MB(相比 golang:1.26 基础镜像的 ~900MB) ``` **Node.js 应用的多阶段构建:** diff --git a/20_cases_os/README.md b/20_cases_os/README.md index 6fefc60..2e35b6c 100644 --- a/20_cases_os/README.md +++ b/20_cases_os/README.md @@ -17,7 +17,7 @@ 在容器化应用开发中,选择合适的基础操作系统镜像直接影响容器的大小、启动速度、安全性和运行性能。不同的镜像提供了不同的功能集和资源占用: - **轻量级镜像** (Busybox、Alpine) - 镜像大小仅几 MB,启动快速,适合微服务、IoT 设备和对资源敏感的环境。Busybox 是最小的选择,集成了常见的 Unix 工具;Alpine 则提供了完整的包管理器,方便安装额外工具。 -- **通用镜像** (Debian、Ubuntu) - 提供完整的 Linux 功能和丰富的软件生态,镜像大小通常在 100-300 MB 之间。适合需要灵活安装各种依赖和工具的应用场景。 +- **通用镜像** (Debian、Ubuntu) - 提供完整的 Linux 功能和丰富的软件生态,镜像大小通常在 80-300 MB 之间。适合需要灵活安装各种依赖和工具的应用场景。 - **企业级镜像** (CentOS、Fedora) - 基于 Red Hat 生态,广泛应用于企业环境和复杂系统应用。提供了 yum 包管理器和强大的系统管理工具。 选择镜像的关键原则是 “小而够用”——选择满足应用需求的最小镜像。这样可以减少安全漏洞表面积、加快镜像拉取和推送速度、降低存储成本,同时也使容器更便于分发和部署。 diff --git a/appendix/faq/errors.md b/appendix/faq/errors.md index 0a4df51..606dee2 100644 --- a/appendix/faq/errors.md +++ b/appendix/faq/errors.md @@ -1,4 +1,4 @@ -## 常见错误速查表 +## 常见错误处理 | 错误信息 / 现象 | 可能原因 | 解决方案 | | :--- | :--- | :--- |