面试题

容器运维面试题

·7 分钟阅读·2632 字

整理 Docker、镜像、容器运行时、资源限制、网络、存储和故障排查相关容器运维面试题

📋 目录

容器运维面试题

核心定位 本文整理容器运维常见面试题,重点覆盖镜像分层、Dockerfile、容器运行时、CGroup、网络、挂载、日志、磁盘清理和生产排障。

1. 容器和虚拟机有什么区别

1.1. 参考答案

对比项容器虚拟机
隔离层级操作系统级隔离硬件虚拟化隔离
内核共享宿主机内核每台虚拟机有独立内核
启动速度秒级或更快通常较慢
资源开销较低较高
镜像体积通常较小通常较大
隔离强度弱于虚拟机强于容器

容器通过 Namespace 隔离视图,通过 CGroup 限制资源,通过联合文件系统实现镜像分层和容器可写层。

2. Docker 镜像为什么可以复用层

2.1. 参考答案

Docker 镜像由多个只读层组成。不同镜像如果使用相同基础层,可以共享本地已有 layer。容器启动时不会复制完整镜像,而是在只读镜像层上增加一个可写容器层。

核心机制:

  1. 镜像层只读共享。
  2. 容器层保存运行时变更。
  3. 修改只读层文件时触发写时复制。
  4. 删除只读层文件时通过 whiteout 标记隐藏。

3. Dockerfile 如何优化构建速度和镜像体积

3.1. 参考答案

优化原则:

  1. 使用 .dockerignore 减少构建上下文。
  2. 稳定指令放前面,频繁变化的源码放后面。
  3. 依赖安装与缓存清理放在同一个 RUN 中。
  4. 使用更小且合适的基础镜像。
  5. 使用多阶段构建,只保留运行时需要的文件。
  6. 不把密钥、日志、临时文件打入镜像。

示例:

FROM node:20-alpine
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
COPY . .
CMD ["node", "server.js"]

4. Docker CGroup 资源限制怎么做

4.1. 参考答案

常见参数:

参数作用
--memory / -m限制最大内存
--memory-swap限制内存 + Swap 总量
--cpus限制 CPU 硬上限
--cpu-sharesCPU 竞争时的相对权重
--cpuset-cpus绑定指定 CPU 核心
--pids-limit限制进程数量
--blkio-weight设置磁盘 IO 权重

示例:

docker run -d \
  --memory=512m \
  --memory-swap=512m \
  --cpus=1 \
  --pids-limit=200 \
  nginx

5. 容器数据为什么不建议写在容器层

5.1. 参考答案

容器层随容器生命周期存在。删除容器后,容器层中的数据也会丢失。因此数据库文件、上传文件、业务日志等需要持久化的数据,应使用 volume 或 bind mount。

挂载方式适用场景
volume生产持久化数据
bind mount本地调试、挂载配置文件
tmpfs临时敏感数据或高速临时缓存

6. 容器网络常见模式有哪些

6.1. 参考答案

Docker 常见网络模式:

模式说明场景
bridge默认桥接网络,通过 veth + bridge 转发单机容器
host共享宿主机网络命名空间高性能或特殊网络需求
none无网络安全隔离或手动配置
overlay跨主机容器网络Swarm 或多主机场景
container共享另一个容器网络命名空间sidecar 模式

生产排查时重点关注容器 IP、宿主机 NAT、端口映射、防火墙和 DNS。

7. 容器磁盘爆满怎么排查

7.1. 参考答案

排查顺序:

  1. 查看 Docker 整体占用。
  2. 查看镜像、容器、卷和构建缓存占用。
  3. 查找大日志文件。
  4. 清理无用镜像、停止容器和 build cache。
  5. 对容器日志配置轮转。

常用命令:

docker system df
docker ps -a
docker images
docker volume ls
docker builder prune

清理前应确认镜像、容器和数据卷是否仍被业务使用,避免误删数据。

8. 容器启动失败怎么排查

8.1. 参考答案

排查顺序:

  1. 查看容器状态和退出码。
  2. 查看容器日志。
  3. 检查启动命令、环境变量和挂载路径。
  4. 检查端口冲突和权限问题。
  5. 检查镜像架构是否匹配宿主机。

命令:

docker ps -a
docker logs <container_id>
docker inspect <container_id>
docker events --since 10m

9. 容器日志过大怎么处理

9.1. 参考答案

Docker 默认 json-file 日志驱动可能导致单容器日志文件过大。生产环境应配置日志轮转。

示例 /etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

修改后需要重启 Docker,并重新创建容器才能对新容器生效。

10. 面试总结

标准回答 容器运维需要理解 Namespace、CGroup、联合文件系统、镜像分层、Dockerfile 构建、网络、挂载和日志。Namespace 负责隔离视图,CGroup 负责限制资源,UnionFS 支撑镜像分层和写时复制。生产排障时,应从容器状态、日志、资源限制、网络连通、挂载路径、磁盘空间和镜像构建过程逐层定位。关键数据不要写入容器层,应使用 volume 或外部存储,并对日志和镜像缓存建立清理策略。


关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro