Docker 与 K8s 题库

这部分你不一定是“平台 owner”,但你一定要准备到:

我知道容器化和编排到底解决什么问题,也知道服务上线、扩缩容、发布和资源隔离为什么要这样做。

一、Docker 是什么

标准回答

Docker 是一种容器化技术,用来把应用及其运行环境一起打包,保证在不同环境里运行一致。

你更好的说法

Docker 的核心价值不是“打包方便”,而是把应用、依赖、配置和运行环境收敛成统一交付单元,解决开发、测试、预发、线上环境不一致的问题。

二、镜像和容器的区别

  • 镜像:静态模板
  • 容器:镜像运行起来后的实例

三、为什么项目要容器化

你可以直接答

  1. 环境一致
  2. 发布更标准化
  3. 服务隔离更清晰
  4. 更方便做扩容、回滚和 CI/CD

结合你的项目怎么讲

像推广 ROI 线里 Go 消费者、PHP 后台、Kafka 消费服务,如果部署方式不统一,排查和发布成本会很高。容器化至少能把服务交付这层先标准化。

四、Docker 常见概念

  • Image
  • Container
  • Volume
  • Network
  • Dockerfile
  • Registry

五、Dockerfile 怎么理解

标准回答

Dockerfile 是镜像构建脚本,用来定义基础镜像、依赖安装、工作目录、复制文件、启动命令等。

你可以补的点

  • 分层构建
  • 尽量减少层数和无效缓存
  • 多阶段构建
  • 应用镜像尽量轻量

六、K8s 是什么

标准回答

Kubernetes 是容器编排平台,用来管理容器化应用的部署、扩缩容、服务发现、滚动发布、故障恢复和资源调度。

你更好的说法

Docker 解决的是“怎么打包和运行一个容器”,K8s 解决的是“很多容器和服务怎么稳定管理”。

七、K8s 核心对象

  • Pod
  • Deployment
  • Service
  • Ingress
  • ConfigMap
  • Secret
  • Namespace

八、Pod 和容器是什么关系

Pod 是 K8s 调度的最小单位,里面可以包含一个或多个容器。一般一个主业务容器配一个 sidecar 或辅助容器。

九、Deployment 的作用

管理无状态服务的副本数、滚动更新和回滚。

十、Service 和 Ingress 区别

  • Service:集群内部服务发现和负载均衡
  • Ingress:对外统一入口和路由规则

十一、为什么 K8s 适合微服务

微服务天然会带来大量服务实例、不同版本、不同扩容需求和发布动作。K8s 的价值就在于把调度、服务发现、滚动发布、健康检查、扩缩容这些能力统一收敛。

十二、滚动发布和回滚怎么理解

  • 滚动发布:逐步替换旧版本,保证服务不中断
  • 回滚:新版本有问题时快速恢复到旧版本

十三、健康检查为什么重要

  • livenessProbe
  • readinessProbe

readiness 负责能不能接流量,liveness 负责是不是需要重启。

十四、CI/CD 怎么讲

一般链路

  1. 代码提交
  2. 自动测试
  3. 构建镜像
  4. 推送镜像仓库
  5. 更新 Deployment
  6. 健康检查
  7. 发布完成或回滚

十五、结合你的项目怎么说

海外业务平台

  • 支付、订阅、后台和鉴定链路都比较重,发布要更关注稳定性
  • 如果服务化以后,适合通过容器标准化部署

推广 ROI 平台

  • Go 消费者、PHP 后台、报表服务、回传服务天然适合拆成不同容器
  • 不同服务副本数和资源需求不同,K8s 更适合统一管理

十六、技术总监最容易问的 3 个点

1. Docker 解决什么问题

解决环境一致性和交付标准化问题。

2. K8s 解决什么问题

解决多服务部署、扩缩容、服务发现、滚动发布和故障恢复问题。

3. 你项目里为什么需要它

因为多服务系统一旦没有标准化部署和编排,发布、回滚、扩缩容和排障都会很痛苦。

十七、你最适合背的总结句

我对 Docker 和 K8s 的理解,重点不是平台术语,而是它们分别解决交付标准化和多服务治理问题。前者让应用运行环境一致,后者让多服务的部署、扩缩容、服务发现和发布回滚更标准、更稳定。