跳到主要内容

Docker面试题

容器基础

核心概念

  1. 什么是容器?容器与虚拟机的本质区别?
  2. Docker的架构是什么?包含哪些核心组件?
  3. 除了Docker还了解过其他的容器技术吗?
  4. 容器的生命周期有哪些状态?

底层技术

  1. Docker如何实现资源隔离?用到了哪些Linux技术?
  2. 什么是Namespace?Docker使用了哪些Namespace?
  3. 什么是Cgroups?如何限制容器资源?
  4. Union FS(联合文件系统)的作用是什么?
  5. Docker支持哪些存储驱动?如何选择?

Docker与Containerd

架构关系

  1. Docker和Containerd的关系是什么?
  2. 为什么要将Containerd从Docker中分离出来?
  3. Docker创建容器的完整调用链是什么?
  4. 什么是OCI(开放容器标准)?

Containerd使用

  1. 如何直接使用Containerd管理容器?
  2. ctr、crictl、nerdctl的区别和使用场景?
  3. Containerd的配置文件在哪里?主要配置项?
  4. K8s为什么选择Containerd作为容器运行时?

镜像管理

镜像基础

  1. Docker镜像的分层结构是怎样的?
  2. 镜像和容器的关系是什么?
  3. 如何查看镜像的详细信息和历史?
  4. 镜像的命名规范是什么?

镜像操作

  1. 如何导出和导入镜像?save/load与export/import的区别?
  2. 如何批量导出多个镜像?
  3. 如何清理无用的镜像?悬空镜像是什么?
  4. 镜像仓库的认证如何配置?

Dockerfile

  1. Dockerfile有哪些常用指令?
  2. ADD和COPY的区别?什么时候用ADD?
  3. CMD和ENTRYPOINT的区别?如何配合使用?
  4. 如何优化Dockerfile减小镜像体积?
  5. 多阶段构建的原理和最佳实践?
  6. 如何在构建时使用缓存提高效率?
  7. ARG和ENV的区别?使用场景?

容器运行

容器管理

  1. docker run常用参数有哪些?
  2. -d、-it、--rm参数的作用?
  3. 如何限制容器的CPU和内存使用?
  4. 如何进入正在运行的容器?exec和attach的区别?
  5. 容器的重启策略有哪些?

数据管理

  1. Docker的数据卷(Volume)类型有哪些?
  2. 数据卷和绑定挂载的区别?
  3. 如何实现容器数据的持久化?
  4. 如何在容器间共享数据?

网络配置

网络模式

  1. Docker有哪几种网络模式?分别的使用场景?
  2. bridge网络的工作原理?docker0的作用?
  3. host网络模式的优缺点?
  4. container网络模式什么时候用?
  5. 自定义网络的优势是什么?

网络通信

  1. 容器间如何通信?同主机和跨主机?
  2. 端口映射-p和-P的区别?
  3. 如何实现容器的固定IP?
  4. Docker如何实现跨主机通信?有哪些方案?

网络排错

  1. 容器端口映射后外部无法访问如何排查?
  2. 容器内无法访问外网如何解决?
  3. 如何查看容器的网络配置?
  4. iptables规则对Docker的影响?

Docker Compose

基础使用

  1. Docker Compose解决什么问题?
  2. docker-compose.yml的主要配置项?
  3. depends_on和links的区别?
  4. 如何定义服务的启动顺序?

高级配置

  1. 如何在Compose中使用环境变量?
  2. 如何管理多环境配置?
  3. Compose中的网络如何配置?
  4. 如何实现服务的扩缩容?

监控与日志

资源监控

  1. 如何查看容器的资源使用情况?
  2. docker stats显示哪些信息?
  3. 如何集成Prometheus监控容器?
  4. cAdvisor的作用是什么?

日志管理

  1. Docker的日志驱动有哪些?
  2. 如何查看和管理容器日志?
  3. 如何限制日志文件大小?
  4. 如何将日志输出到外部系统?

安全与优化

容器安全

  1. 容器的安全威胁有哪些?
  2. 如何以非root用户运行容器?
  3. 如何限制容器的系统调用?
  4. 镜像安全扫描如何实现?

性能优化

  1. Docker在生产环境的最佳实践?
  2. 如何优化容器的启动速度?
  3. 存储驱动的性能对比?
  4. 如何减少镜像构建时间?

CI/CD集成

流水线集成

  1. Docker在CI/CD中的作用?
  2. 如何在Jenkins中使用Docker?
  3. 如何实现镜像的自动构建?
  4. 多阶段发布如何实现?

部署策略

  1. 如何实现蓝绿部署?
  2. 滚动更新如何保证业务不中断?
  3. 如何快速回滚到上一版本?

故障排查

常见问题

  1. 容器无法启动如何排查?
  2. 容器内存OOM如何处理?
  3. Docker daemon无响应如何解决?
  4. 磁盘空间不足如何清理?

调试技巧

  1. 如何调试正在运行的容器?
  2. 如何分析容器的启动日志?
  3. 如何导出容器的文件系统?
  4. 如何追踪容器的系统调用?

K8s集成

容器运行时

  1. K8s如何管理Docker容器?
  2. CRI(容器运行时接口)是什么?
  3. 为什么K8s弃用Docker转向Containerd?
  4. 不同运行时对应用的影响?

迁移实践

  1. 从Docker迁移到Containerd需要注意什么?
  2. 如何在K8s中选择合适的容器运行时?
  3. 容器运行时的发展趋势?

更新时间:2025-01-30