Docker面试突击手册:20个核心问题全覆盖

Docker面试突击手册: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 五大核心组件

  1. Client
  2. Daemon
  3. Image
  4. Container
  5. Registry

镜像是模板,容器是运行实例。


三、容器运行机制

6️⃣ docker run 背后做了什么?

执行:

1
docker run httpd

内部流程:

  1. 检查本地镜像
  2. 无则从 Registry 拉取
  3. 创建容器
  4. 分配 namespace
  5. 设置 cgroup
  6. 配置网络
  7. 启动默认命令

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
2
3
docker image prune -a
docker container prune
docker volume prune

清理前建议先查看:

1
2
docker ps -a
docker images

14 启动 Docker Compose 应用

1
docker-compose up -d

必须在 docker-compose.yml 所在目录执行。


15 指定 Compose 文件

1
docker-compose -f custom.yml up -d

16 查看 Compose 日志

1
2
docker-compose logs -f
docker-compose logs -f nginx

六、进阶与生产篇

17 Volume 和 Bind Mount 区别?

Bind Mount图片

1
docker run -v /data:/var/lib/mysql mysql

特点:

  • 绑定宿主机目录
  • 运维排查方便

Volume图片

1
2
docker volume create mydata
docker run -v mydata:/var/lib/mysql mysql

特点:

  • 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
2
--cpus="2"
--memory="2g"

4️⃣ 镜像过大图片

优化方式:

  • 合并 RUN
  • 多阶段构建
  • 使用 alpine

https://mp.weixin.qq.com/s/xeVrF274HJ1aXn0A1bJvDg?scene=1