Skip to content

docs: add docker-topic to content/docs/baguwen/Tools.md#21

Merged
LeoninCS merged 1 commit into
LeoninCS:mainfrom
QCsnakeSUFE:docs/add-docker-interview
May 20, 2026
Merged

docs: add docker-topic to content/docs/baguwen/Tools.md#21
LeoninCS merged 1 commit into
LeoninCS:mainfrom
QCsnakeSUFE:docs/add-docker-interview

Conversation

@QCsnakeSUFE
Copy link
Copy Markdown
Contributor

添加了 Tools 中 Docker 部分的答案,并添加了一个面试题:滚动发布、灰度发布、蓝绿发布的目的及区别。

@LeoninCS LeoninCS requested a review from Copilot May 20, 2026 05:22
@LeoninCS LeoninCS merged commit c0639a7 into LeoninCS:main May 20, 2026
3 checks passed
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

本次 PR 为 Hugo 文档站 content/docs/baguwen/Tools.md 的「Docker 与部署」章节补充了多道面试题的折叠答案,并新增了“滚动/灰度/蓝绿发布”对比题,完善八股文工具与部署专题的内容覆盖。

Changes:

  • 为 Docker 基础概念与 Dockerfile 指令、多阶段构建、CMD/ENTRYPOINT 等问题补充可折叠答案。
  • 补充容器启动失败排查、配置与环境变量管理、不停机发布等实践类答案。
  • 新增并对比滚动发布、灰度发布、蓝绿发布的目的与差异。

Comment on lines +37 to +41
**可直接说:** 镜像是静态、只读的文件系统快照,而容器是动态、运行中的进程及其环境的实例。面试里可按三点展开:生命周期:镜像一次构建可以多次复用,而容器是临时的,生命周期短,只能运行一次;可修改性:镜像只读,改了必须重新构建,而容器有独立的读写层;数量关系:一个镜像可以对应多个容器实例,而一个容器实例只能对应一个镜像。


**关键点:**
- 生命周期:镜像一次构建可以多次复用,而容器是临时的,生命周期短,只能运行一次。

<div class="qa-answer-body">

**可直接说:** 多阶段构建是指在一个 dockerfile 中用多个`FROM`指令,每一个`FROM`代表一个独立的构建阶段,本质是多个镜像的接力构建。每个`FROM`指令都会启动一个全新的镜像,前面阶段生成的文件可以通过`COPY --from=阶段名`复制到后面的阶段,所有前面的阶段不会出现在最终镜像里。
**关键点:**
- 极致减小镜像体积:避免复制不必要的文件,大幅加快镜像的拉取速度,使得部署时间大幅缩短;磁盘占用小、传输带宽成本降低;
- 提升安全性:运行镜像里没有编译器、调试器等工具,减小了攻击面;没有多余的二进制文件,黑客无法利用这些文件进行攻击。
- 分离构建和运行环境:构建阶段只负责编译和打包应用,不负责运行;运行阶段负责负责运行应用,不负责编译和打包。
- 分离构建和运行环境:构建阶段只负责编译和打包应用,不负责运行;运行阶段负责负责运行应用,不负责编译和打包。

**注意**
先复制`go.mod go.sum`文件到构建阶段,再复制应用代码到运行阶段。这样做的目的是最大化利用 Docker 构建缓存,只要`go.mod go.sum`文件没有改变,`go mod download`就会直接用缓存,不用每次都重新下载依赖,大幅加快构建速度。
Comment on lines +88 to +92
**可直接说:** `CMD`指定容器启动时默认执行的命令,会被`docker run`后面的参数完全覆盖,`ENTRYPOINT`指定容器启动时的入口命令,不会被`docker run`覆盖,参数会被追加到入口命令后面。
| 场景 | CMD | ENTRYPOINT |
| --- | --- | --- |
| 被 `docker run` 参数覆盖 | 完全覆盖 | 参数被追加 |
| 最佳用途 | 提供默认命令和参数 | 固定容器的主程序 |
Comment on lines +104 to +108
**可直接说:** 先看容器状态,再看日志、容器配置、最后看容器资源、依赖、网络。
- 看容器状态:`docker ps -a`
- 看容器日志:`docker logs 容器 ID/容器名`
- 看容器配置:`docker inspect 容器ID`
- 看容器资源、依赖、网络:`netstat -ltnp`检查网络端口占用情况,`docker stats`检查内存/CPU占用情况,`docker network inspect 容器名`检查网络配置。
Comment on lines +136 to +138
- 环境变量:把配置通过`ENV`指令或运行时传给容器
- 环境变量文件:把环境变量写入一个`.env`文件,容器启动时通过`--env-file`参数指定。
- 配置文件:把配置文件挂载进容器,不打包进镜像
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants