Docker 相关的问题 ,分层四个板块 :
第一板块:Docker 基础与虚拟机区别(必考题)
Q1:Docker 是什么?核心价值是什么?
- 回答模板:
Docker 是一个基于 Linux 容器(LXC) 的开源虚拟化平台。它将应用程序及其依赖打包成一个标准化的 镜像(Image) ,然后在操作系统层进行隔离,运行成一个 容器(Container)。
它的核心价值是实现了 "一次构建,到处运行"。彻底解决了传统开发中"在我电脑上能跑,部署到服务器上却报错"的环境一致性问题,同时相比虚拟机更轻量、更高效。
Q2:Docker 容器 vs 虚拟机(VM)的区别?
- 回答模板:
主要区别在于虚拟化层级和资源开销:
- 层级不同 :虚拟机是硬件级虚拟化 ,需要完整的 Guest OS( guest 操作系统);Docker 是操作系统级虚拟化,直接共享宿主机的 Kernel(内核)。
- 性能/大小:Docker 秒级启动,占用资源极少(MB级),性能接近原生;虚拟机分钟级启动,占用资源高(GB级),有明显的性能损耗。
- 隔离性:虚拟机隔离性最强(系统级);Docker 是进程级隔离,虽然轻量但安全性相对弱一点。
第二板块:核心概念与命令(基础加分项)
Q3:镜像(Image)和容器(Container)的关系?
- 回答模板:
镜像就是一个只读的模板 ,包含了运行程序所需的代码和依赖;容器是镜像运行的实例。
可以把它们类比为 类与对象 或者 电影光盘与播放的电影:镜像是静态的文件,容器是动态运行的进程。一个镜像可以启动成多个容器。
Q4:Docker run 命令的核心参数有哪些?(必考)
- 回答模板:
我最常用的三个核心参数:
- -p:端口映射,格式为 宿主机端口:容器端口,这是外部访问容器服务的关键。
- -v:数据卷挂载,格式为 宿主机目录:容器目录,用于解决容器数据持久化的问题。
- -d:后台运行容器, detached 模式,避免容器占用终端。
第三板块:面试必备·踩坑经历(核心抢分点)
⚠️ 策略 :面试官问这个问题时,不要只背答案,要表现出你有排查思路。
Q5:遇到过 Docker 踩坑经历吗?(结合截图三连击)
第一坑:镜像拉取慢/失败
- 经历:我在部署时遇到过拉取镜像速度极慢甚至超时的问题。
- 原因:国内网络访问 Docker Hub 官方仓库受限。
- 解决 :配置国内镜像加速器,修改 /etc/docker/daemon.json,加入阿里云或腾讯云的加速地址。
第二坑:容器启动了,但外部访问不到
- 经历:容器启动成功了,但用 IP 加端口访问不通。
- 排查三部曲(必背顺序):
- 先查 端口映射 :确认 run 命令里的端口有没有写反或漏写。
- 再查 防火墙:确认服务器防火墙(Linux 层面)是否开放了该端口。
- 最后查 安全组:如果是云服务器,必须在控制台配置安全组规则放行端口(这是新手最容易漏的)。
第三坑:容器重启后数据丢失
- 经历:部署服务后,发现重启容器数据就没了。
- 原因:容器默认的存储层是临时的,删除/重启容器后数据会丢失。
- 解决 :必须使用 数据卷(Volume) -v 挂载宿主机目录,将数据持久化到宿主机上。现在我部署前一定会检查挂载配置。
第四板块:Docker Compose(多容器管理)
Q6:什么是 Docker Compose?解决什么问题?
- 回答模板:
Docker Compose 是一个用来定义和运行多容器应用的工具。
它通过一个docker-compose.yml 文件配置所有服务依赖(比如 Web 服务、MySQL、Redis),然后通过一条命令 up/down 就能一键启动或停止整个应用环境。解决了手动管理多个容器启停顺序和关联的问题,主要用于开发和测试环境。
Q7:Docker Compose 为什么不在生产环境上使用?
- 回答模板:
核心原因是 Docker Compose 缺乏生产级必备的高可用、可扩展性和运维管控能力,具体有4点关键原因:
- 无高可用机制:单节点部署,宿主机故障会导致所有容器服务全部宕机,无法实现故障转移,无法满足生产环境7×24小时运行需求。
- 扩展性极差:无法实现容器集群部署,流量增长时只能手动在单节点扩容,无法分布式扩展,应对不了高并发场景。
- 缺乏运维管控:没有完善的监控、日志聚合、滚动更新和回滚机制,服务出问题难以快速排查恢复,且更新服务需停止所有相关容器,无法平滑更新。
- 不支持跨节点管理:仅能管理单台宿主机的容器,生产环境多为多节点集群部署,无法跨节点协调容器,满足不了分布式部署需求。
面试延伸:生产环境中,通常用 Kubernetes(K8s)替代 Docker Compose,K8s 具备集群管理、高可用、自动扩缩容等生产级能力,适配大规模服务部署。
如果面试官问:"你平时工作中怎么用 Docker?"
"我主要用 Docker 来搭建开发和测试环境。首先通过 Dockerfile 构建自定义镜像,然后使用 docker run 或 Compose 启动容器。
在部署过程中我重点关注了网络互通 和数据持久化两个问题,并且熟悉国内镜像源的配置,遇到网络问题会按照'端口-防火墙-安全组'的顺序去排查。"