对容器与Docker层级表示两种不同表述的困惑及求解
两种容器架构表述的正误判定
首先直接给结论:你倾向的第二种表述是符合技术本质的正确结论,第一种是为了降低理解门槛做的非严谨简化表达,存在误导性。
核心逻辑说明
- 容器的本质是被Linux内核的
Namespace、Cgroup、Capability等机制做了资源隔离和权限限制的普通进程组,从内核调度的角度看,容器进程和宿主机上其他普通进程没有任何区别,全程直接由内核调度运行,不需要任何中间层代理。 - Docker(包括其他容器引擎如containerd、cri-o等)的定位是容器生命周期管理工具,它只负责如下工作:
- 处理用户的启停容器指令,准备容器运行需要的根文件系统(rootfs)
- 调用内核接口创建隔离环境、配置资源限制
- 拉起容器内的首个进程
- 后续提供日志收集、状态监控、cli交互等运维能力
- 可以用一个简单测试验证:启动一个运行常驻业务的容器后,执行
systemctl stop docker命令关闭Docker daemon进程,你会发现容器内的业务进程依然正常运行,只是无法再通过Docker命令对其进行操作,直接证明容器运行不依赖Docker层。
第一种广为流传表述的由来
早期科普容器技术时,为了和大众更熟悉的虚拟机架构做类比(虚拟机运行在Hypervisor层之上),很多资料刻意把Docker放到了类似Hypervisor的位置,简化了技术逻辑方便新手快速建立认知,但这个类比完全不符合实际技术实现,属于为了易用性牺牲准确性的表述。
内容的提问来源于stack exchange,提问作者Metalhead
相关产品推荐
相关产品推荐

