Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions 08-devops/docker/Docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
* [四、使用场景](#四使用场景)
* [五、架构与核心对象](#五架构与核心对象)
* [六、镜像与容器](#六镜像与容器)
* [七、面试补充:Docker 工程化要点](#七面试补充docker-工程化要点)
* [参考资料](#参考资料)
<!-- GFM-TOC -->

Expand Down Expand Up @@ -100,6 +101,30 @@ Docker 采用客户端-服务器架构,开发者通常通过命令行或其它

<div align="center"> <img src="assets/docker-filesystems-busyboxrw.png"/> </div><br>

# 七、面试补充:Docker 工程化要点

Docker 面试题不要只背命令,建议围绕“镜像构建、容器运行、网络存储、可观测性、生产约束”来回答。

## 镜像与容器的区别

镜像是只读模板,包含应用、依赖和启动配置;容器是镜像运行后的进程实例,拥有独立的文件系统视图、网络命名空间和资源限制。容器删除后运行时写入层会丢失,持久化数据应放到 Volume、对象存储或外部数据库中。

## Dockerfile 分层与缓存

Dockerfile 每条指令通常会生成一层镜像。工程实践中要把变化少的依赖安装放在前面,把变化频繁的业务代码放在后面,这样可以更好复用构建缓存。生产镜像还应减少无用工具和临时文件,必要时使用多阶段构建降低镜像体积和攻击面。

## 网络与数据卷

容器网络常见模式包括 bridge、host、none 和 overlay。单机开发常用 bridge,跨主机编排通常依赖 overlay 或 Kubernetes 网络插件。数据卷用于把容器生命周期和数据生命周期拆开,适合保存上传文件、日志缓冲、数据库数据目录等需要持久化的内容。

## 资源限制与健康检查

生产环境要显式配置 CPU、内存、文件句柄、重启策略和健康检查。内存限制过小会触发 OOM,CPU 限制过严会导致接口延迟上升。`HEALTHCHECK` 或编排平台探针应检查真实依赖状态,避免只检查进程存在。

## 日志与排障

容器日志通常输出到 stdout 和 stderr,由宿主机或日志系统采集。排障时先看 `docker ps`、`docker logs`、`docker inspect` 和容器退出码,再检查端口映射、环境变量、挂载路径、镜像版本和宿主机资源。线上不建议在容器内手工修改文件,应该通过镜像重建和发布流程修复。

# 参考资料

- [DOCKER 101: INTRODUCTION TO DOCKER WEBINAR RECAP](https://blog.docker.com/2017/08/docker-101-introduction-docker-webinar-recap/)
Expand Down