01 面试官到底想通过Docker考察什么
多候选人觉得Docker面试就是问几个命令——"docker run"、"docker build"、"docker-compose up"。但如果面试官只想知道你会不会敲命令,为什么不在笔试里出选择题。
Docker面试的底层逻辑是考察三件事:第一,你是否理解容器和虚拟机的本质区别;第二,你能否用容器化思维解决部署问题;第三,你在容器化实践中踩过哪些坑、怎么解决的。命令只是表层,面试官通过命令顺藤摸瓜,挖的是你对操作系统虚拟化、进程隔离、文件系统分层的理解。
一个经典的面试题:"Docker容器是轻量级虚拟机吗?"如果你回答"是",基本就挂了。正确的回答是:容器和虚拟机解决的是不同层面的问题——虚拟机虚拟化硬件,每个VM有独立OS内核;容器虚拟化的是操作系统层,所有容器共享宿主机内核,通过Namespace做进程隔离、Cgroup做资源限制。
02 必须掌握的五大核心概念
Docker面试高频考点集中在五个方向,按考察频率排序:
**镜像分层与写时复制**:Dockerfile中每一条指令生成一个镜像层,层是只读的。容器启动时在最上层加一个可写层,所有修改写在这里。面试常问"为什么镜像体积突然变大",答:因为在可写层写了大量文件。
**Dockerfile最佳实践**:多阶段构建是必考点。第一阶段用完整SDK编译代码,第二阶段只复制编译产物到精简运行时镜像,最终镜像体积可能从1G降到50MB。面试官还会追问"RUN、CMD、ENTRYPOINT的区别"——RUN在构建时执行、CMD提供默认启动命令可被覆盖、ENTRYPOINT定义不可变的入口。
**网络模式**:Bridge模式下容器之间通过docker0网桥通信,Host模式直接使用宿主机网络栈,None模式完全隔离。常考场景题:"两个容器之间怎么通信?"答案是用自定义Bridge网络,通过容器名DNS解析。
**数据持久化**:Volume和Bind Mount的区别。Volume由Docker管理,存储在宿主机特定目录,容器删除后Volume不丢失;Bind Mount直接映射宿主机路径。常踩的坑:Mac上Bind Mount性能极差,建议用Volume。
**Docker Compose编排**:多容器应用的声明式管理。面试重点:depends_on只控制启动顺序不等同于服务就绪,需要配合healthcheck或wait-for-it脚本。
03 容器化面试中最容易被问倒的三个问题
第一个:**Docker镜像优化实际案例**。别讲理论,说数据:把哪个项目的镜像从多大优化到多大、用了哪些手段(选alpine基础镜像、多阶段构建、清理apt缓存、.dockerignore排除node_modules)。
第二个:**生产环境容器日志怎么管理**。新手会说"docker logs",但生产环境容器重启后日志就丢了。正确回答:通过logging driver输出到ELK/Loki等集中日志系统,容器本身不落地存储日志。
第三个:**容器安全实践**。核心三点:不以root用户运行容器(USER指令)、扫描镜像漏洞(Trivy/Clair)、只读根文件系统(read_only: true)。还要提一嘴不要将Docker socket挂载进容器。
京公网安备 11010802030320号