携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天,点击查看活动详情
docker引擎组件构成
- docker客户端
- docker守护进程
- containerd以及runc
但并不是一开始就是这样的。
Docker首次发布时,Docker引擎由LXC和Docker daemon组成。
这里的Docker daemon 是单一的二进制文件,包含客户端、API、容器运行时、镜像构建等。
而LXC提供命名空间Namespace和控制组CGroup等基础工具等操作能力,基于Linux内核的容器虚拟化技术。
可以说,以前的Docker 是依赖于LXC的。
这里有几个问题。
- 依赖Linux,不符合跨平台
- 核心组件依赖外部工具,有巨大风险
所以docker公司开发了Libcontainer的自研工具,替代LXC。Libcontainer能够成为与平台无关的工具,基于不同内核提供必要的容器交互功能。
Libcontainer后来成为了默认的执行驱动。
此外,Docker daemon呈现的臃肿状态也带来很多问题。
所以需要拆解。
至今,所有容器执行和容器运行时的代码已经从daemon中移除,并重构。