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 启动容器。

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

相关推荐
头疼的程序员2 小时前
计算机网络:自顶向下方法(第七版)第八章 学习分享(四)
学习·计算机网络
m0_677904842 小时前
K8s学习
java·学习·kubernetes
|_⊙2 小时前
红黑树 (C++)
开发语言·c++·学习
ByteCraze2 小时前
手写高性能虚拟列表(详解!!!)
javascript·学习
扣脑壳的FPGAer2 小时前
数字信号处理学习笔记--Chapter 1.3 常系数线性差分方程
笔记·学习·信号处理
东北洗浴王子讲AI2 小时前
GPT-5.4英语口语学习全攻略:从开口困难到流利表达的进阶之路
gpt·学习
walkerLing3 小时前
Docker_Day1
运维·docker·容器
王的宝库3 小时前
GitLab 常用 Git 命令新手指南
git·学习
ruan1145143 小时前
MySQL -- 个人学习记录
学习