docker基础-运维工程师面试
架构原理”、“镜像与容器生命周期”、“网络与存储” 这三大支柱展开。
三大核心:容器、镜像、仓库
Docker 的完整运行依赖三大基石(Namespace、Cgroups、UnionFS(联合文件系统))
一、Docker 与虚拟机的区别?即docker与kvm的区别
💡 形象比喻
KVM (虚拟机) 就像是 独栋别墅**。**
每栋别墅都有自己的地基、水管、电路、厨房(独立内核)。
你想住进去,得先把房子盖好(启动慢)。
邻居着火了很难烧到你(隔离性好)。
但是占地大,成本高。
Docker (容器) 就像是 胶囊旅馆的隔间**。**
大家共享大楼的地基、总水管、总电路(共享内核)。
你只需要拎包入住(启动极快)。
空间利用率极高,一栋楼能住很多人。
但如果大楼地基(内核)塌了,所有人都得遭殃;隔音效果也没别墅好(隔离性稍弱)。
1、核心架构区别 (最本质的不同)
2、性能与资源对比
3. 隔离性与安全性
4、镜像与管理
🚀 总结:什么时候用哪个?
使用 KVM (虚拟机) 的场景**:**
需要运行不同的操作系统(如在 Linux 服务器上跑 Windows 应用)。
需要极强的安全隔离(如公有云的多租户底层)。
遗留系统迁移,应用强依赖特定的旧内核版本。
作为基础设施层(IaaS),为上层提供计算资源。
使用 Docker (容器) 的场景**:**
微服务架构,应用需要频繁迭代、快速部署。
追求极致的资源利用率和启动速度。
DevOps 和 CI/CD 流程。
云原生应用(Cloud Native)。
最佳实践 (混合使用)**:**
底层**:物理服务器 ->** KVM 虚拟机 (提供安全隔离和资源切分)。
上层**:虚拟机内部 ->** Docker 容器 (提供应用打包和敏捷交付)。
编排**:Kubernetes (管理这些运行在 VM 里的容器)。**
面试回答金句**:**
"KVM 解决了硬件资源的虚拟化和强隔离问题,是云计算的基石;而 Docker 解决了应用交付的一致性和敏捷性问题,是云原生的核心。在现代架构中,我们通常是在 KVM 创建的虚拟机中运行 Docker 容器,结合两者的优势。"
二、Docker 默认使用以下 6 种 Namespace **来实现全方位的隔离
类比:像给进程戴上“VR 眼镜”,它只能看到自己虚拟出来的世界。
namespace 就像一个 隔板,把原本全局共享的大空间分隔成多个小房间,
每个进程只能在自己的房间里活动。进程看不到房间外的东西,所以它“以为”自己独占了系统。
1、namespace
1、容易混淆的概念:Cgroups 是做什么的?
很多人会误以为 Cgroups 也负责隔离,这是错误的。
Namespace = 隔离 (Isolation) -> "我看不到你" (视线阻断)。
Cgroups = 限制 (Limitation) -> "我不能抢你的资源" (资源配额)。
2、 第三个支柱:UnionFS (联合文件系统)
虽然 UnionFS (如 Overlay2) 不直接负责运行时的“隔离”,但它实现了**镜像的分层存储和写时复制 (Copy-on-Write)。**
它让多个容器可以共享同一个基础镜像层,节省磁盘空间。
它保证了容器对文件系统的修改不会影响到镜像本身或其他容器(这也是一种数据层面的隔离)。