Docker的6年之痒! - java后端

进而将单个项目拆分为不同的开放组件:

然后进化到可以共享这些组件以及组件集合(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),并为应用程序提供一致的编程接口以及网络抽象。这样就可以满足容器网络的“可组合”需求。

Docker & Docker Swarm

Docker Swarm是一个在Docker引擎中构建的编排工具,从Docker1.12开始它就作为一个独立的工具被原生包含在Docker Engine中。我们可以使用Docker Cli通过Docker Swarm创建群集,并部署和管理应用程序和服务。下图描述了Docker Swarm在Docker体系中的作用:

Docker&Kubernetes

在Docker Swarm与Kubernetes的竞争中,显然是Kubernetes占据了优势。所以Docker紧急掉头,开始原生的支持与Kubernetes的集成。

这可是2017年容器界的一大新闻啊,至此,Docker用户和开发人员可以自由地选择使用Kubernetes或是Swarm执行容器的编排工作。我们可以认为Docker与Kubernetes联姻了:

新的支持Kubernetes集成的Docker版本将允许用户把他们的Docker Compose应用程序部署为Kubernetes本地Pod和服务。Kubernetes是一款非常强大且逐渐被大众认可的本地编排工具:

希望大家没有被文中众多的名称和概念搞糊涂,让我们以下图来结束本文,它展示了从2013年到2017年从Docker Hub拉取镜像次数的趋势:

注:本文所有图片均来自互联网

参考

<An Overall View On Docker Ecosystem — Containers , Moby, Swarm, Linuxkit, containerd, Kubernetes>

2