千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

当前位置:首页  >  应聘面试  >  云计算面试题  > Docker容器化技术面试核心知识点梳理_千锋教育

Docker容器化技术面试核心知识点梳理_千锋教育

来源:千锋教育
发布人:cli
时间: 2026-05-09 17:45:34 1778319934

01 容器与虚拟机:面试官挖的第一个坑

“容器就是轻量级虚拟机”——如果你在面试时脱口而出这句话,那么恭喜你,已经在面试官心里贴上了“基础不牢”的标签。Docker面试的第一道题几乎永远是:“说说容器和虚拟机的区别?”看似简单,但90%的候选人会栽在“轻量级”三个字的陷阱里。

容器的本质是进程隔离,而虚拟机的本质是硬件虚拟化。你打开一台虚拟机,看到的是一个完整的操作系统内核;你启动一个容器,看到的仅仅是宿主操作系统上的一个进程,只不过这个进程拥有独立的文件系统、网络栈和进程空间。虚拟机通过Hypervisor模拟底层硬件,每个Guest OS都要占用GB级别的磁盘和内存;容器则直接共享宿主内核,通过Linux的Namespace(命名空间)实现资源隔离,通过Cgroups(控制组)限制资源使用。一个容器的镜像可能只有几十MB,而虚拟机镜像动辄几个GB——这不是“更轻”,而是原理上的完全不同。

“那容器比虚拟机更安全吗?”面试官紧接着挖第二个坑。真相恰恰相反:因为容器共享内核,一旦内核出现漏洞,攻击者可以从一个容器逃逸到宿主机。而虚拟机由于有独立的内核,逃逸难度大得多。生产环境中,容器通常配合安全策略(如Seccomp、AppArmor)使用,但永远不要默认容器就比虚拟机安全。面试官真正想听到的是:你清楚容器和虚拟机各自的适用场景,而不是盲目吹捧容器。

金句:容器不是微型虚拟机,而是带着镣铐的进程——镣铐名叫Namespace和Cgroups。

02 镜像分层:为什么你的Dockerfile永远比别人大?

面试官打开你的简历,问:“你的Docker镜像多大?”你说:“1.2GB。”对方笑了笑:“我们生产环境的镜像控制在100MB以内。”瞬间,你从“精通Docker”变成了“会用Docker build”。镜像分层是Docker的底层设计,也是面试必考点。每一行Dockerfile指令都会生成一个新的只读镜像层,而容器的读写层只是薄薄的一层可写层。分层带来的好处是缓存复用:如果某层没有变化,构建时会直接使用缓存。

但多人忽略了层的“副作用”。例如,你写了一个Dockerfile:

text
FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3
COPY app.py /app/
RUN pip install -r requirements.txt

每次执行apt-get update都会产生一个几百MB的新层,如果后续修改了requirements.txt,前面三层缓存仍有效,但最后一层需要重跑。更致命的是,如果你在同一个RUN指令中执行了apt-get install然后删除缓存文件(如rm -rf /var/lib/apt/lists/*),这两个操作如果不在同一层,删除操作其实只是“标记删除”,文件仍然存在于下层镜像中,镜像尺寸不会减小。面试官期待的正确答案是:使用多阶段构建(multi-stage build),并且将包安装与清理放在同一个RUN指令中。

金句:Docker镜像不是蛋糕,是千层饼——每一层都留下热量,除非你在同一口锅里烤完。

03 Docker网络:容器通信的暗坑

“启动一个nginx容器,从另一个容器访问它,你怎么配置?”这个问题能筛掉一半面试者。Docker默认提供了三种网络模式:bridge(桥接)、host(主机)、none(无网络)。当你docker run不加任何网络参数时,容器默认连接到名为docker0的桥接网络。每个容器获得一个172.17.0.x的私有IP,容器之间可以通过IP通信。但生产环境中,IP是动态分配的,你不能写死IP。正确的做法是使用--link(已废弃)或者创建自定义桥接网络(user-defined bridge),在自定义网络中,容器可以用容器名称作为DNS域名互相解析。

另一个高频考点是端口映射:-p 8080:80 到底发生了什么?Docker会在宿主机上添加一条iptables规则,将宿主机8080端口的流量转发到容器80端口。如果你使用-P(大写),Docker会随机分配一个高位端口映射到容器暴露的端口(EXPOSE指令)。面试官会追问:“如果宿主机防火墙拦截了流量,怎么排查?”答案核心是检查iptables的nat表规则和Docker的转发链。

至于存储,Docker提供了三种数据持久化方式:bind mount(绑定挂载)、volume(卷)、tmpfs(临时文件系统)。面试常问:“volume和bind mount的区别是什么?”volume由Docker管理,存储在/var/lib/docker/volumes/下,跨宿主机迁移推荐使用volume driver;bind mount则直接挂载宿主机的任意路径,依赖于宿主机的目录结构。面试中若能提到docker volume prune清理未使用的卷,以及--mount语法比-v更清晰,会加分。

金句:容器网络不是魔法,是iptables规则的芭蕾——跳错一步,流量就摔个跟头。

04 Docker Compose与容器编排:面试的终极大题

面试官问:“如果我有3个服务(Web、API、DB),怎么用Docker部署?”你说:“一个一个启动。”面试官沉默。Docker Compose就是为解决多容器应用编排而生的。核心文件是docker-compose.yml,里面定义了services、networks、volumes。面试中常考的点:depends_on只会控制依赖启动顺序,但不等待服务就绪(比如MySQL启动后还需要几秒才能接受连接)。真实的做法是使用healthcheck或者自定义wait-for-it脚本。

另一个关键点是Compose与生产环境的差距。Compose适用于开发测试,但生产环境通常需要Kubernetes或Docker Swarm。面试官会问:“你什么时候用Compose,什么时候用K8s?”正确答案是:当应用复杂度低、节点数少(小于10)时,使用Swarm或Compose足以;当需要自动伸缩、滚动更新、服务发现时,K8s是标准选择。如果你能说出Compose file与K8s YAML的结构异同,以及如何用kompose工具将Compose文件转换为K8s资源清单,面试官会眼前一亮。

金句:Docker Compose是乐高说明书,而K8s是建筑蓝图——你至少得会拼乐高,才能谈盖大楼。

---

结尾狠话:容器的世界里,面试官从不问你会不会用,只问你知不知道坑在哪——毕竟,生产环境没机会让你重写Dockerfile。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT