Docker面试突击手册:20个核心问题全覆盖
Docker面试突击手册:20个核心问题全覆盖
ZhangCurryDocker面试突击手册:20个核心问题全覆盖
不管是面试 Docker 岗位,还是日常运维、开发中使用容器,总有一些问题绕不开:
- 容器隔离到底靠什么实现?
- namespace 和 cgroup 区别是什么?
- RUN 和 CMD 有什么本质差异?
- Docker Compose 怎么排查日志?
- 生产环境如何优化性能?
这篇文章整理了 20 个 Docker 核心高频问题,覆盖:
✔ 底层原理 ✔ 网络机制 ✔ 架构组成 ✔ 镜像构建 ✔ 容器运行 ✔ 数据持久化 ✔ 性能优化
新手入门,老手查漏补缺,面试直接复习。
一、底层原理篇
1️⃣ 容器隔离及资源限制的底层技术是什么?
核心只有两个:
namespace —— 做“隔离”
让容器拥有独立的:
- 进程空间
- 网络空间
- 文件系统
- 主机名
- 用户空间
cgroup —— 做“资源限制”
控制容器使用多少:
- CPU
- 内存
- 磁盘 IO
- 网络带宽
一句话总结:
namespace 负责“看起来独立” cgroup 负责“资源不越界”
2️⃣ namespace 六大隔离类型
| 类型 | 隔离内容 |
|---|---|
| mnt | 文件系统 |
| UTS | 主机名 |
| IPC | 进程通信 |
| PID | 进程号 |
| net | 网络 |
| user | 用户权限 |
比如:
- 容器内 PID 1 ≠ 宿主机 PID 1
- 容器内 root ≠ 宿主机 root
二、网络与架构篇
3️⃣ Docker 默认三种网络模式
🔹 bridge(默认)
- 使用 docker0 网桥
- 容器分配独立 IP
- 隔离性好
🔹 host
- 直接使用宿主机网络
- 性能最高
- 容易端口冲突
🔹 none
- 无网络
- 只有 127.0.0.1
4️⃣ Docker 架构模型
Docker 是 C/S 架构:
- Client:命令行工具
- Daemon:后台守护进程
- Registry:镜像仓库
执行流程:
Client → Daemon → Registry → 返回结果
5️⃣ Docker 五大核心组件
- Client
- Daemon
- Image
- Container
- Registry
镜像是模板,容器是运行实例。
三、容器运行机制
6️⃣ docker run 背后做了什么?
执行:
1 | docker run httpd |
内部流程:
- 检查本地镜像
- 无则从 Registry 拉取
- 创建容器
- 分配 namespace
- 设置 cgroup
- 配置网络
- 启动默认命令
7️⃣ 为什么基础镜像那么小?
原因:
Docker 复用宿主机内核。
Linux = 内核 + 用户空间
Docker 镜像只包含:
用户空间(rootfs)
不包含内核。
8️⃣ 什么是 Copy-on-Write?
写时复制机制:
- 镜像层是只读
- 容器有可写层
- 修改文件才复制
- 未修改文件共享
优点:
✔ 节省空间 ✔ 提高效率
四、Dockerfile 构建篇
9️⃣ Dockerfile 基本结构
主要指令:
- FROM(基础镜像)
- RUN(构建时执行)
- COPY / ADD(复制文件)
- ENV(环境变量)
- WORKDIR(工作目录)
- CMD / ENTRYPOINT(启动命令)
每个指令都会生成一层镜像。
🔟 RUN 和 CMD 区别?
| 对比 | RUN | CMD |
|---|---|---|
| 执行时机 | 构建镜像时 | 容器启动时 |
| 作用 | 安装软件 | 启动服务 |
| 是否可覆盖 | 不可 | 可被覆盖 |
口诀:
RUN 构建用 CMD 启动用
11 COPY 和 ADD 区别?
COPY:
- 只做本地复制
- 推荐使用
ADD:
- 可自动解压
- 可远程下载
原则:
能用 COPY 就不用 ADD
五、日常运维高频命令
12 查看镜像构建历史
1 | docker history 镜像名 |
加 -H 显示完整命令。
13 清理未使用资源
1 | docker image prune -a |
清理前建议先查看:
1 | docker ps -a |
14 启动 Docker Compose 应用
1 | docker-compose up -d |
必须在 docker-compose.yml 所在目录执行。
15 指定 Compose 文件
1 | docker-compose -f custom.yml up -d |
16 查看 Compose 日志
1 | docker-compose logs -f |
六、进阶与生产篇
17 Volume 和 Bind Mount 区别?
Bind Mount
1 | docker run -v /data:/var/lib/mysql mysql |
特点:
- 绑定宿主机目录
- 运维排查方便
Volume
1 | docker volume create mydata |
特点:
- Docker 管理
- 更规范
18 为什么不建议一个容器多个进程?
容器理念:
一个容器一个主进程
好处:
- 易管理
- 易扩展
- 符合微服务思想
19 Docker 为什么比虚拟机轻量?
虚拟机:
硬件 → Hypervisor → Guest OS → 应用
Docker:
硬件 → Host OS → Docker → 容器
关键差异:
Docker 不虚拟内核。
20 Docker 常见性能瓶颈?
1️⃣ 存储驱动
推荐:overlay2
1 | docker info | grep Storage |
2️⃣ 日志无限增长
建议配置 daemon.json 限制日志大小。
3️⃣ 未设置资源限制
1 | --cpus="2" |
4️⃣ 镜像过大
优化方式:
- 合并 RUN
- 多阶段构建
- 使用 alpine



