Docker 学习之路-从入门到放弃:7

Docker 相关的问题 ,分层四个板块 :

第一板块:Docker 基础与虚拟机区别(必考题)

Q1:Docker 是什么?核心价值是什么?

  • 回答模板

Docker 是一个基于 Linux 容器(LXC) 的开源虚拟化平台。它将应用程序及其依赖打包成一个标准化的 镜像(Image) ,然后在操作系统层进行隔离,运行成一个 容器(Container)

它的核心价值是实现了 "一次构建,到处运行"。彻底解决了传统开发中"在我电脑上能跑,部署到服务器上却报错"的环境一致性问题,同时相比虚拟机更轻量、更高效。

Q2:Docker 容器 vs 虚拟机(VM)的区别?

  • 回答模板

主要区别在于虚拟化层级和资源开销:

  1. 层级不同 :虚拟机是硬件级虚拟化 ,需要完整的 Guest OS( guest 操作系统);Docker 是操作系统级虚拟化,直接共享宿主机的 Kernel(内核)。
  2. 性能/大小:Docker 秒级启动,占用资源极少(MB级),性能接近原生;虚拟机分钟级启动,占用资源高(GB级),有明显的性能损耗。
  3. 隔离性:虚拟机隔离性最强(系统级);Docker 是进程级隔离,虽然轻量但安全性相对弱一点。

第二板块:核心概念与命令(基础加分项)

Q3:镜像(Image)和容器(Container)的关系?

  • 回答模板

镜像就是一个只读的模板 ,包含了运行程序所需的代码和依赖;容器是镜像运行的实例

可以把它们类比为 类与对象 或者 电影光盘与播放的电影:镜像是静态的文件,容器是动态运行的进程。一个镜像可以启动成多个容器。

Q4:Docker run 命令的核心参数有哪些?(必考)

  • 回答模板

我最常用的三个核心参数:

  • -p:端口映射,格式为 宿主机端口:容器端口,这是外部访问容器服务的关键。
  • -v:数据卷挂载,格式为 宿主机目录:容器目录,用于解决容器数据持久化的问题。
  • -d:后台运行容器, detached 模式,避免容器占用终端。

第三板块:面试必备·踩坑经历(核心抢分点)

⚠️ 策略 :面试官问这个问题时,不要只背答案,要表现出你有排查思路

Q5:遇到过 Docker 踩坑经历吗?(结合截图三连击)

第一坑:镜像拉取慢/失败

  • 经历:我在部署时遇到过拉取镜像速度极慢甚至超时的问题。
  • 原因:国内网络访问 Docker Hub 官方仓库受限。
  • 解决 :配置国内镜像加速器,修改 /etc/docker/daemon.json,加入阿里云或腾讯云的加速地址。

第二坑:容器启动了,但外部访问不到

  • 经历:容器启动成功了,但用 IP 加端口访问不通。
  • 排查三部曲(必背顺序)
  1. 先查 端口映射 :确认 run 命令里的端口有没有写反或漏写。
  2. 再查 防火墙:确认服务器防火墙(Linux 层面)是否开放了该端口。
  3. 最后查 安全组:如果是云服务器,必须在控制台配置安全组规则放行端口(这是新手最容易漏的)。

第三坑:容器重启后数据丢失

  • 经历:部署服务后,发现重启容器数据就没了。
  • 原因:容器默认的存储层是临时的,删除/重启容器后数据会丢失。
  • 解决 :必须使用 数据卷(Volume) -v 挂载宿主机目录,将数据持久化到宿主机上。现在我部署前一定会检查挂载配置。

第四板块:Docker Compose(多容器管理)

Q6:什么是 Docker Compose?解决什么问题?

  • 回答模板

Docker Compose 是一个用来定义和运行多容器应用的工具。

它通过一个docker-compose.yml 文件配置所有服务依赖(比如 Web 服务、MySQL、Redis),然后通过一条命令 up/down 就能一键启动或停止整个应用环境。解决了手动管理多个容器启停顺序和关联的问题,主要用于开发和测试环境。

Q7:Docker Compose 为什么不在生产环境上使用?

  • 回答模板

核心原因是 Docker Compose 缺乏生产级必备的高可用、可扩展性和运维管控能力,具体有4点关键原因:

  1. 无高可用机制:单节点部署,宿主机故障会导致所有容器服务全部宕机,无法实现故障转移,无法满足生产环境7×24小时运行需求。
  2. 扩展性极差:无法实现容器集群部署,流量增长时只能手动在单节点扩容,无法分布式扩展,应对不了高并发场景。
  3. 缺乏运维管控:没有完善的监控、日志聚合、滚动更新和回滚机制,服务出问题难以快速排查恢复,且更新服务需停止所有相关容器,无法平滑更新。
  4. 不支持跨节点管理:仅能管理单台宿主机的容器,生产环境多为多节点集群部署,无法跨节点协调容器,满足不了分布式部署需求。

面试延伸:生产环境中,通常用 Kubernetes(K8s)替代 Docker Compose,K8s 具备集群管理、高可用、自动扩缩容等生产级能力,适配大规模服务部署。

如果面试官问:"你平时工作中怎么用 Docker?"

"我主要用 Docker 来搭建开发和测试环境。首先通过 Dockerfile 构建自定义镜像,然后使用 docker run 或 Compose 启动容器。

在部署过程中我重点关注了网络互通数据持久化两个问题,并且熟悉国内镜像源的配置,遇到网络问题会按照'端口-防火墙-安全组'的顺序去排查。"

相关推荐
潘正翔12 分钟前
k8s基础_kubeadm搭建k8s集群
linux·运维·docker·云原生·容器·kubernetes
Echo flower20 分钟前
Docker 容器中 Puppeteer 僵尸进程排查与修复
运维·docker·容器·puppeteer
潘正翔1 小时前
k8s进阶_Harbor镜像仓库
git·云原生·容器·kubernetes·gitee·github
江湖有缘1 小时前
Docker实战 | 使用Docker部署Donetick任务与家务管理应用
运维·docker·容器
流星白龙2 小时前
【Docker】4.NameSpace空间隔离实战
java·运维·docker
编程圈子2 小时前
电机驱动开发学习21. R3_2 双相扇区电流采样与第三相重构
驱动开发·学习·重构
听雨入夜3 小时前
CMake构建学习笔记-libxml库的构建
笔记·学习
雨辰AI3 小时前
K8s 达梦数据守护集群部署|容器化高可用生产落地指南
云原生·容器·kubernetes
面对疾风叭!哈撒给3 小时前
Linux ARM架构的docker和docker-compose离线安装
linux·docker·架构
张忠琳4 小时前
【NPU】Ascend Docker Runtime v26.0.1 之一 runtime/main.go — 超深度分析
云原生·容器·架构·kubernetes·npu·docker-runtime