Docker & The Open Containers Initiative(OCI)
OCI 是一个轻量级的开放式管理架构,由 docker,CoreOS 和容器行业的其他领导厂商于 2015 年建立。它维护一些项目,如 runC ,还有容器运行时规范和镜像规范。OCI 的目的是围绕容器行业制定标准,比如使用 docker 创建的容器可以在任何其他容器引擎上运行。
2016 - Docker & containerd
2016年,Docker 分拆了 containerd,并将其捐赠给了社区。将这个组件分解为一个单独的项目,使得 docker 将容器的管理功能移出 docker 的核心引擎并移入一个单独的守护进程(即 containerd)。
Docker Components
分拆完 containerd 后,docker 各组件的关系如下图所示(此图来自互联网):
至此,docker 从一个单一的软件演变成了一套相互独立的组件和项目。
Docker 如何运行一个容器?
Docker 引擎创建容器映像
将容器映像传递给 containerd
containerd 调用 containerd-shim
containerd-shim 使用 runC 来运行容器
containerd-shim 允许运行时(本例中为 runC)在启动容器后退出
该模型带来的最大好处是在升级 docker 引擎时不会中断容器的运行。
2017 - 容器成为主流
2017 年是容器成为主流技术的一年,这就是为什么 docker 在 Linux 之外支持众多平台的原因(Docker for Mac,Docker for Windows,Docker for AWS,GCP 等)。
当容器技术被大众接受后,Docker 公司意识到需要新的生产模型,这就是为什么它开始 Moby 项目。
Moby ProjectMoby 项目开启了实现协作和生产的新篇章。它是一个开源项目,旨在推进软件的容器化。Moby 项目提供了数十个乐高积木一样的组件以及将它们组装成定制的基于容器的系统的框架。
Docker 生产模型像任何其他常见的单个开源项目一样开始(此图来自互联网):
进而将单个项目拆分为不同的开放组件(此图来自互联网):
然后进化到可以共享这些组件以及组件集合(assembly)的模型(此图来自互联网):
最终达到能够提供更多关于组件和通用组件集合的协作的模型(此图来自互联网):
下面我们就来介绍一些 Moby 项目中的组件。
Containerd
Containerd 是 docker 基于行业标准创建的核心容器运行时。它可以用作 Linux 和 Windows 的守护进程,并管理整个容器生命周期。
Linuxkit
Linuxkit 是 Moby 项目中的另一个组件,它是为容器构建安全、跨平台、精简系统的工具。目前已经支持的本地 hypervisor 有 hyper-v 和 vmware。支持的云平台有 AWS、Azure 等。
Infrakit
Infrakit 也是 Moby 项目的一部分。它是创建和管理声明式、不可变和自我修复基础架构的工具包。
Infrakit 旨在自动化基础架构的设置和管理,以支持分布式系统和更高级别的容器编排系统。Infrakit 对于像 Docker Swarm 和 Kubernetes 这样的编排工具或跨越 AWS 等公共云创建自动缩放群集的用例很有用。
Libnetwork
Libnetwork 是用 Go 语言实现的容器网络管理项目。它的目标是定义一个容器网络模型(CNM),
并为应用程序提供一致的编程接口以及网络抽象。这样就可以满足容器网络的 "可组合" 需求。