Docker 面试题怎么准备?高频考点与答题思路
在技术岗位面试中,Docker 几乎是运维、后端、测试开发和平台工程岗位的高频考点。很多候选人看过不少教程,但一到面试就发现问题问得很细:镜像和容器有什么区别、如何做数据持久化、容器网络怎么理解、Dockerfile 怎么写得更好。想把 docker 面试题答得稳,不能只背概念,而要把“原理、命令、场景、排错”四部分串起来。
下面这篇内容按面试常问方向整理,既适合准备校招,也适合有一定工作经验、想系统梳理 Docker 知识的同学。建议家长如果帮助孩子做升学或求职规划,也可以把它当成技能面试复习清单来参考。
一、面试官最爱问的 Docker 基础题
基础题看似简单,但最能暴露你是否真的用过 Docker。常见问题包括:什么是 Docker、容器与虚拟机有什么区别、镜像和容器如何关联、Docker 的核心组成是什么。回答这类题时,最好用“定义 + 对比 + 使用场景”的结构。
例如,容器和虚拟机的区别可以这样答:虚拟机是在物理机上虚拟出完整操作系统,隔离强但资源开销大;容器共享宿主机内核,启动快、占用低,更适合应用交付和弹性扩缩容。再进一步,可以补充 Docker 的典型组件:Docker Client、Docker Daemon、Image、Container、Registry。这样不仅说明你知道概念,还能体现你对整体架构的理解。
面试时,很多人只会说“镜像是只读模板,容器是运行中的实例”,这没错,但还不够。更好的回答是:镜像由多个只读层组成,容器是在镜像基础上加了一层可写层运行;删除容器后可写层会消失,镜像本身不会被修改。这样的描述会让面试官觉得你理解了底层机制。
二、Dockerfile 相关高频题,重点看你会不会写
Dockerfile 是最常见的实操题之一。面试官可能会让你解释每个指令的作用,或者给你一段 Dockerfile 让你指出问题。常见考点有:FROM、RUN、COPY、ADD、CMD、ENTRYPOINT、ENV、WORKDIR、EXPOSE、VOLUME 的区别和使用场景。
准备这部分时,建议重点记住几个容易混淆的点:
- RUN:在构建镜像阶段执行命令,产生新的镜像层。
- CMD:定义容器启动时默认执行的命令,可被覆盖。
- ENTRYPOINT:定义容器固定入口,通常与 CMD 配合使用。
- COPY 和 ADD:通常优先用 COPY,ADD 多了自动解压和远程拉取等特性,但可控性更差。
- VOLUME:用于声明挂载点,适合数据持久化场景。
如果面试官问“如何优化 Dockerfile”,可以从镜像体积和构建效率两个角度回答。比如尽量使用体积更小的基础镜像,减少 RUN 层数,把安装和清理写在同一条 RUN 中,合理利用构建缓存,先复制依赖清单再安装依赖,最后复制源代码。对于 Java、Node.js、Go 等语言,还可以根据语言特点说明多阶段构建的好处。
例如多阶段构建的价值在于:编译环境和运行环境分离,最终镜像只保留运行所需文件,减小体积并降低安全风险。这个点在面试里非常加分。
三、容器网络、存储和数据持久化是加分项
很多候选人在基础题上表现不错,但一问到网络和存储就开始模糊。实际上,这两块很容易成为区分“会用”和“用得熟”的分界线。Docker 网络常见类型包括 bridge、host、none,以及自定义网络。面试时可以先说默认的 bridge 网络,再补充自定义网络的优势,比如可以通过容器名直接通信,减少手动配置和维护成本。
如果问到端口映射,可以说明:容器内部服务默认只在容器网络中可见,通过 -p 或 --publish 进行宿主机端口映射后,外部才能访问。若进一步追问排查思路,可以从容器进程是否启动、监听地址是否正确、端口映射是否生效、防火墙是否拦截这几个方向回答。
存储和持久化同样重要。Docker 的数据保存方式常见有三种:绑定挂载、卷、tmpfs 挂载。面试时建议区分清楚:
- 绑定挂载:直接把宿主机目录挂到容器,适合本地开发和调试,但耦合宿主机路径。
- 卷:由 Docker 管理,适合生产环境数据持久化,更便于迁移和备份。
- tmpfs:存放在内存中,容器停止后数据消失,适合临时敏感数据。
如果对方问“为什么容器删了数据就没了”,你就可以顺势解释容器的可写层生命周期,以及为什么生产上要把数据库、日志、上传文件等关键数据放在卷或外部存储中。答题时最好结合真实场景,比如 MySQL 容器必须挂载数据目录,否则容器重建后会丢失数据。
四、面试中常见的排错题与实战回答方式
除了概念题,面试官很喜欢问故障排查题,因为这类问题最能看出实际经验。比如:容器启动后立即退出怎么办、镜像拉不下来怎么办、服务能启动但外部访问不了怎么办、容器内程序正常但日志不输出怎么办。
回答排错题的关键是先分层,再定位。可以按照“镜像构建、容器运行、网络连通、应用配置、宿主机环境”五层去排查。比如容器启动后退出,首先看容器主进程是否结束,检查 docker logs 和 docker inspect,确认 ENTRYPOINT/CMD 是否正确,程序是否需要前台运行。很多服务在容器里启动失败,是因为默认以前台方式运行,而程序被配置成后台守护进程后立刻退出。
如果镜像拉取失败,可以检查仓库地址、DNS、代理、登录状态和证书配置;如果端口访问不了,可以检查容器端口暴露、宿主机防火墙、安全组以及服务监听地址是否绑定到 0.0.0.0 而不是 127.0.0.1。这样的回答会显得你有排障思维,而不是只会背命令。
还可以补充一点:面试官通常希望你能说出命令,而不是只讲思路。比如查看运行中的容器用 docker ps,查看日志用 docker logs,进入容器用 docker exec -it,查看详细信息用 docker inspect,查看镜像用 docker images,构建镜像用 docker build。把命令和场景对应起来,答题会更自然。
五、复习 docker 面试题的高效方法
如果时间有限,不建议盲目刷题,而要按模块整理知识。可以先搭一个复习顺序:基础概念、常用命令、Dockerfile、网络、存储、镜像仓库、排错、与编排工具的关系。每学完一个模块,就自己用口头方式复述一遍,最好能讲给别人听,这样最容易发现知识漏洞。
实操上,建议至少完成以下练习:
- 自己写一个简单 Dockerfile,把一个 Web 项目打包成镜像。
- 创建容器并进行端口映射、环境变量配置和卷挂载。
- 尝试进入容器、查看日志、修改配置并重启验证结果。
- 测试自定义网络下的容器互通。
- 模拟一次构建失败或启动失败,练习定位原因。
另外,面试前最好准备一套“项目化表达”。例如不要只说“我会 Docker”,而要说“我在项目里用 Dockerfile 做过应用镜像构建,用卷保存数据库数据,通过端口映射和自定义网络完成了服务部署,并解决过容器启动即退出的问题”。这种表达既具体,又能把技能和场景连接起来。
对于初学者来说,docker 面试题的核心不是背多少条命令,而是能否把 Docker 的工作方式讲清楚,并把知识落到真实部署场景中。把基础概念、Dockerfile、网络、存储和排错这五块练扎实,面试时就不容易慌。最后建议把自己常错的点单独整理成一页速记表,临面试前再快速过一遍,效果通常比临时刷几十道题更好。
总结来说,准备 Docker 面试要“懂原理、会操作、能排错、会表达”。只要把这四点练到位,大多数 docker 面试题都能应对自如。