Docker面试题
容器基础
核心概念
- 什么是容器?容器与虚拟机的本质区别?
- Docker的架构是什么?包含哪些核心组件?
- 除了Docker还了解过其他的容器技术吗?
- 容器的生命周期有哪些状态?
底层技术
- Docker如何实现资源隔离?用到了哪些Linux技术?
- 什么是Namespace?Docker使用了哪些Namespace?
- 什么是Cgroups?如何限制容器资源?
- Union FS(联合文件系统)的作用是什么?
- Docker支持哪些存储驱动?如何选择?
Docker与Containerd
架构关系
- Docker和Containerd的关系是什么?
- 为什么要将Containerd从Docker中分离出来?
- Docker创建容器的完整调用链是什么?
- 什么是OCI(开放容器标准)?
Containerd使用
- 如何直接使用Containerd管理容器?
- ctr、crictl、nerdctl的区别和使用场景?
- Containerd的配置文件在哪里?主要配置项?
- K8s为什么选择Containerd作为容器运行时?
镜像管理
镜像基础
- Docker镜像的分层结构是怎样的?
- 镜像和容器的关系是什么?
- 如何查看镜像的详细信息和历史?
- 镜像的命名规范是什么?
镜像操作
- 如何导出和导入镜像?save/load与export/import的区别?
- 如何批量导出多个镜像?
- 如何清理无用的镜像?悬空镜像是什么?
- 镜像仓库的认证如何配置?
Dockerfile
- Dockerfile有哪些常用指令?
- ADD和COPY的区别?什么时候用ADD?
- CMD和ENTRYPOINT的区别?如何配合使用?
- 如何优化Dockerfile减小镜像体积?
- 多阶段构建的原理和最佳实践?
- 如何在构建时使用缓存提高效率?
- ARG和ENV的区别?使用场景?
容器运行
容器管理
- docker run常用参数有哪些?
- -d、-it、--rm参数的作用?
- 如何限制容器的CPU和内存使用?
- 如何进入正在运行的容器?exec和attach的区别?
- 容器的重启策略有哪些?
数据管理
- Docker的数据卷(Volume)类型有哪些?
- 数据卷和绑定挂载的区别?
- 如何实现容器数据的持久化?
- 如何在容器间共享数据?
网络配置
网络模式
- Docker有哪几种网络模式?分别的使用场景?
- bridge网络的工作原理?docker0的作用?
- host网络模式的优缺点?
- container网络模式什么时候用?
- 自定义网络的优势是什么?
网络通信
- 容器间如何通信?同主机和跨主机?
- 端口映射-p和-P的区别?
- 如何实现容器的固定IP?
- Docker如何实现跨主机通信?有哪些方案?
网络排错
- 容器端口映射后外部无法访问如何排查?
- 容器内无法访问外网如何解决?
- 如何查看容器的网络配置?
- iptables规则对Docker的影响?
Docker Compose
基础使用
- Docker Compose解决什么问题?
- docker-compose.yml的主要配置项?
- depends_on和links的区别?
- 如何定义服务的启动顺序?
高级配置
- 如何在Compose中使用环境变量?
- 如何管理多环境配置?
- Compose中的网络如何配置?
- 如何实现服务的扩缩容?
监控与日志
资源监控
- 如何查看容器的资源使用情况?
- docker stats显示哪些信息?
- 如何集成Prometheus监控容器?
- cAdvisor的作用是什么?
日志管理
- Docker的日志驱动有哪些?
- 如何查看和管理容器日志?
- 如何限制日志文件大小?
- 如何将日志输出到外部系统?
安全与优化
容器安全
- 容器的安全威胁有哪些?
- 如何以非root用户运行容器?
- 如何限制容器的系统调用?
- 镜像安全扫描如何实现?
性能优化
- Docker在生产环境的最佳实践?
- 如何优化容器的启动速度?
- 存储驱动的性能对比?
- 如何减少镜像构建时间?
CI/CD集成
流水线集成
- Docker在CI/CD中的作用?
- 如何在Jenkins中使用Docker?
- 如何实现镜像的自动构建?
- 多阶段发布如何实现?
部署策略
- 如何实现蓝绿部署?
- 滚动更新如何保证业务不中断?
- 如何快速回滚到上一版本?
故障排查
常见问题
- 容器无法启动如何排查?
- 容器内存OOM如何处理?
- Docker daemon无响应如何解决?
- 磁盘空间不足如何清理?
调试技巧
- 如何调试正在运行的容器?
- 如何分析容器的启动日志?
- 如何导出容器的文件系统?
- 如何追踪容器的系统调用?
K8s集成
容器运行时
- K8s如何管理Docker容器?
- CRI(容器运行时接口)是什么?
- 为什么K8s弃用Docker转向Containerd?
- 不同运行时对应用的影响?
迁移实践
- 从Docker迁移到Containerd需要注意什么?
- 如何在K8s中选择合适的容器运行时?
- 容器运行时的发展趋势?
更新时间:2025-01-30