Docker
入门预计上手 2-4 周星团 云与基础设施
岗位需求
4 核心 · 2 加分
在职岗位将其列为技能要求
核心岗位薪资带
15k-55k
核心要求岗位的月薪区间
需求趋势
上升 2稳定 2收缩 0
核心要求岗位的趋势分布
面试题库
高频真题 · 参考答案随题展开1. 镜像与容器是什么关系?分层与联合文件系统如何工作?
镜像是静态模板:由只读层叠加而成,Dockerfile 每条指令生成一层,层内容是文件系统变更与元数据,层全局共享(同基础镜像只存一份)。容器是镜像的运行实例:启动时在所有只读层之上加一个可写层(写时复制),删除容器即丢可写层,数据要持久化必须挂 volume。联合文件系统(overlay2 等)把多层目录联合挂载成单一视图:读文件自上而下找第一个命中层;修改上层的文件先从下层复制上来再改(copy-up);删除靠 whiteout 标记遮蔽下层文件。好处是镜像分发增量传输(拉取只下本地没有的层)、构建缓存按层复用(指令未变直接命中)。由此推出 Dockerfile 优化:把少变的步骤放前面、变化频繁的放后面、合并 run 减层数与清理缓存同层进行。能讲 copy-up 与缓存失效顺序即满分。
2. Dockerfile 有哪些关键指令?如何写好它?
核心指令:FROM 选基础镜像(优先 alpine、slim、distroless 缩小体积);COPY 优于 ADD(ADD 的自动解压与远程 url 行为易出意外);RUN 执行构建命令;ENV 与 ARG(构建期变量)设环境;EXPOSE 声明端口仅为文档;ENTRYPOINT 与 CMD 组合定启动命令(ENTRYPOINT 定程序,CMD 给默认参数,docker run 传参会覆盖 CMD)。写好要点:多阶段构建——编译阶段用重工具链镜像,运行阶段只 COPY 产物到轻量镜像,体积与攻击面双降;层缓存——依赖清单先 COPY 再装依赖,源码后拷,改代码不重装依赖;合并 RUN 并同层清理 apt 缓存与临时文件;指定固定版本 tag 而非 latest 保证可复现;非 root 用户运行、健康检查 HEALTHCHECK 声明;用 .dockerignore 排除 node_modules 与 .git。能现场写多阶段 Go 或前端构建示例即优秀。
3. 容器与虚拟机的本质区别是什么?
虚拟机虚拟整套硬件,每个 VM 跑完整客户操作系统内核,由 Hypervisor 调度,隔离最强(内核级)但重:GB 级内存占用、分钟级启动、大量冗余系统进程。容器是进程级虚拟化:共享宿主内核,靠 namespace 做视图隔离(pid、net、mnt、uts、ipc、user 各自独立)、cgroups 做资源限制(CPU 配额、内存上限、io 权重),配合联合文件系统提供独立根文件系统,因此 MB 级占用、秒级启动、密度高一个量级。代价是隔离弱于 VM(共享内核,内核漏洞可逃逸;user namespace 缓解),所以安全敏感场景用 VM 加容器嵌套或 kata containers、firecracker 这类轻量 VM 兼顾两者。一句话总结:VM 隔离操作系统,容器隔离进程。能点名 namespace 六件套与 cgroups 两类机制即完整。
4. 容器的网络模式有哪些?端口映射如何实现?
bridge(默认):docker 创建虚拟网桥 docker0,每容器一对 veth 设备接入,容器经 NAT 访问外网(iptables SNAT),同网桥容器间可用自动 DNS(compose 网络内服务名互通);host:共享宿主网络栈无隔离,性能无损但端口冲突;none:无网络仅 lo,配合自建网络;container 模式复用另一容器网络栈(K8s pod 的雏形);overlay:跨主机 vxlan 隧道支撑集群。端口映射 -p 8080冒号80 由 docker-proxy 与 iptables DNAT 实现:宿主 8080 转发到容器 80,是 bridge 模式对外暴露服务的入口;host 模式直接监听宿主端口无需映射。排查工具:docker network inspect、容器内 ip 与路由、宿主 iptables 加 t nat 看 nat 表规则。DNS 与自定义网络(--network 自建)让容器名可解析,是 compose 与 k8s 服务发现的基础。能讲 veth 加网桥加 DNAT 三要素即优秀。
5. volume、bind mount 与 tmpfs 有什么区别?
volume 由 Docker 管理(存于 /var/lib/docker/volumes),生命周期独立于容器,删除容器不删卷,删除需显式 docker volume rm;跨平台兼容最好,可命名复用,支持卷驱动接远程存储,是持久化数据库、缓存数据的首选。bind mount 把宿主任意目录挂进容器(-v 绝对路径冒号容器路径),双向实时可见,适合开发热加载源码与共享配置文件;缺点是依赖宿主路径结构、权限问题多(容器内 uid 与宿主不一致)、可移植性差。tmpfs 挂内存,不落盘,适合敏感临时数据(令牌、socket)与高性能临时目录,容器停止即消失。compose 里对应 volumes 的长语法可指定读写模式(ro 只读)。数据不落可写层的另一理由:copy-up 语义与大文件 IO 性能。能按场景各给一例并提权限坑即完整。
官方文档
2 条官方组织页,引擎、CLI 与文档仓库的总入口
Docker 引擎开源核心仓库,读源码理解容器实现
推荐教程
2 条开源中文书再版维护,原理与实战兼备
中文命令速查与基础概念,快速上手友好
推荐课程
0 条待共建——资源由编辑部持续遴选补充。
上手实践
1 条免费浏览器环境,无本地安装也能练完整流程
难度档决定星等与难度分权重(入门 1 / 进阶 2 / 精通 3);学习资源由编辑部遴选并持续维护, 经验心得欢迎在上方「知识分享」区署名分享。

