Moby
一个致力于推进软件容器化运动的开源项目。
在DockerCon17上,Docker发布了两个新的开源项目LinuxKit和Moby。而原来在Github上托管的docker也随着PR #32691的合入正式变为Moby。
可以说Moby是Docker之母。通过Moby可以将定制化的组件打包做成一个Docker容器引擎,而Moby就相当于一个组件仓库与Docker工厂。Docker公司的这一举动可以说也是顺应了潮流,将Docker与操作系统解耦,并且将其以组件组装的形式模块化。可以说今后,操作系统也是Docker容器的一个基础组件。而Moby项目既是一个组件库又是一个框架,为今后组件制作与组装提供了一套规范。它提供了一套组件的“乐高积木”,一个将组件装配成定制化基于容器的系统的框架和一个所有容器发烧友试验与交流想法的场所。把Moby想象成容器系统的“乐高俱乐部”吧。
Moby由以下几部分组成:
- 一个容器化的后端组件库(例如:一个低层builder,日志功能、数据卷管理、网络、镜像管理、containered、SwarmKit)
- 一个可以将这些组件装配成独立的容器平台并协助构建、测试、部署构件的框架
- 一个叫Moby Origin的参考——它是Docker容器平台的开放基础,同时也是使用来自Moby库或是其它项目的组件的容器系统样例。
Moby是为系统构建者——想构建自己的基于容器的系统的人设计的,而不是使用Docker或者其他容器平台的开发者。Moby项目的参与者可以选择派生自Docker的组件库,也可以“bring your own components(自带组件)” (BYOC),打包成可以混合搭配其他组件的容器来创建定制化的容器系统。
Docker使用Moby项目作为开放的研发实验室,用于试验、开发新组件并与生态圈就未来容器技术进行合作。我们所有的开源合作都会迁移到Moby项目。Docker现在、将来都一直会是一个可以让你构建、传播、运行容器的开源项目。从用户角度来说,一切都没有发生变化。用户可以继续在docker.com上下载Docker。
Moby本身的Logo是一头鲸鱼的尾巴,我认为这个Logo的含义便是:你只看到了那会是Docker大鲸鱼,但是到底会是一头怎样的鲸鱼,便要通过Moby孕育才能看完整了。
Busybox
- 官网:https://busybox.net/
- 官方仓库:https://git.busybox.net/busybox/
- 官方镜像:https://hub.docker.com/_/busybox/
BusyBox 是一个集成了一百多个最常用 Linux 命令和工具(如 cat、echo、grep、mount、telnet 等)的精简工具箱,它只需要几 MB 的大小,很方便进行各种快速验证,被誉为“Linux 系统的瑞士军刀”。BusyBox 可运行于多款 POSIX 环境的操作系统中,如 Linux(包括 Android)、Hurd、FreeBSD 等。
Alpine
Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常Linux 发行版, Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,因此得到开源社区越来越
多的青睐。在保持瘦身的同时, Alpine 还提供了自己的包管理工具 apk ,可以通过 https://pkgs.alpinelinux.org/packages 网站上查询包信息,也可以直接通过 apk 命令直接查询和安装各种软件。
Alpine 由非商业组织维护的,支持广泛场景的 Linux 发行版,它特别为资深/重度 Linux 用户而优化,关注安全,性能和资源效能。 Alpine 镜像可以适用于更多常用场景,并且是一个优秀的可以适用于生产的基础系统/环境。
Alpine Docker 镜像也继承了 Alpine Linux 发行版的这些优势。相比于其他Docker 镜像,它的容量非常小,仅仅只有 5 MB 左右(对比 Ubuntu 系列镜像接近 200 MB),且拥有非常友好的包管理机制。官方镜像来自 docker-alpine 项目。
目前 Docker 官方已开始推荐使用 Alpine 替代之前的 Ubuntu 做为基础镜像环境。这样会带来多个好处。包括镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。
下表是官方镜像的大小比较:
1 | REPOSITORY TAG IMAGE ID VIRTUAL SIZE |
目前,大部分 Docker 官方镜像都已经支持 Alpine 作为基础镜像,可以很容易进行迁移。例如:
1 | ubuntu/debian -> alpine |
另外,如果使用 Alpine 镜像替换 Ubuntu 基础镜像,安装软件包时需要用apk 包管理器替换 apt 工具,如
1 | $ apk add --no-cache <package> |
Alpine 中软件安装包的名字可能会与其他发行版有所不同,可以在https://pkgs.alpinelinux.org/packages 网站搜索并确定安装包名称。如果需要的安装包不在主索引内,但是在测试或社区索引中。那么可以按照以下方法使用这些安装包。
1 | $ echo "http://dl-4.alpinelinux.org/alpine/edge/testing" >> /etc |
Kubernetes
Kubernetes 是 Google 团队发起的开源项目,它的目标是管理跨多个主机的容器,提供基本的部署,维护以及运用伸缩,主要实现语言为 Go 语言。
Mesos
Mesos 项目是源自 UC Berkeley 的对集群资源进行抽象和管理的开源项目,Mesos 项目主要由 C++ 语言编写。
Mesos 最初由 UC Berkeley 的 AMP 实验室于 2009 年发起,遵循 Apache 协议,目前已经成立了 Mesosphere 公司进行运营。Mesos 可以将整个数据中心的资源(包括 CPU、内存、存储、网络等)进行抽象和调度,使得多个应用同时运行在集群中分享资源,并无需关心资源的物理分布情况。如果把数据中心中的集群资源看做一台服务器,那么 Mesos 要做的事情,其实就是今天操作系统内核的职责:抽象资源 + 调度任务。Mesos 项目是 Mesosphere公司 Datacenter Operating System (DCOS) 产品的核心部件。
- Mesosphere官网:https://mesosphere.com/
- mesos项目官网:http://mesos.apache.org/
- github: https://github.com/apache/mesos
etcd
etcd 是 CoreOS 团队于 2013 年 6 月发起的开源项目,它的目标是构建一个高可用的分布式键值( key-value )数据库,基于 Go 语言实现。
- github: https://github.com/etcd-io/etcd
受到 Apache ZooKeeper 项目和 doozer 项目的启发,前者是一套知名的分布式系统中进行同步和一致性管理的工具,后者是一个一致性分布式数据库。
etcd 在设计的时候重点考虑了下面四个要素:
- 简单:具有定义良好、面向用户的 API (gRPC)
- 安全:支持 HTTPS 方式的访问
- 快速:支持并发 10 k/s 的写操作
- 可靠:支持分布式结构,基于 Raft 的一致性算法
Raft 是一套通过选举主节点来实现分布式系统一致性的算法,相比于大名鼎鼎的Paxos 算法,它的过程更容易被人理解,由 Stanford 大学的 Diego Ongaro 和John Ousterhout 提出。更多细节可以参考https://raft.github.io。
一般情况下,用户使用 etcd 可以在多个节点上启动多个实例,并添加它们为一个集群。同一个集群中的 etcd 实例将会保持彼此信息的一致性。
默认 2379 端口处理客户端的请求, 2380 端口用于集群各成员间的通信。
Vagrant
Vagrant 是一个用来构建和管理虚拟机环境的工具。Vagrant 有着易于使用的工作流,并且专注于自动化,降低了开发者搭建环境的时间,提高了生产力。解决了“在我的机器上可以工作”的问题。
Vagrant 是为了方便的实现虚拟化环境而设计的,使用 Ruby 开发,基于 VirtualBox 等虚拟机管理软件的接口,提供了一个可配置、轻量级的便携式虚拟开发环境。使用 Vagrant 可以很方便的就建立起来一个虚拟环境,而且可以模拟多台虚拟机,这样我们平时还可以在开发机模拟分布式系统。
Terraform
Terraform 的主要用途是管理云提供商的远程资源,比如 AWS。Terraform 可以管理横跨多个云提供商巨量的基础设施。而 Vagrant 主要用来管理仅使用少量虚拟机的本地开发环境。
Vagrant 用于开发环境,Terraform 普遍用于基础设施管理。
Vagrant 和 Terraform 都出自同一个公司 HashiCorp,该公司主要做一些开源软件,相关的产品还有 Packer,Consul,Vault,Nomad 等。
CoreOS
CoreOS是一个基于Linux 内核的轻量级操作系统,为了计算机集群的基础设施建设而生,专注于自动化,轻松部署,安全,可靠,规模化。
CoreOS 内置了由自己开发的容器 Rkt和docker,另外还有服务发现组件etcd,etcd是以rkt 容器方式运行。
CoreOS 可以在一个机器上很好地运行,但是它被设计用来搭建集群。可以通过 k8s 很容易得使应用容器部署在多台机器上并且通过服务发现把他们连接
在一起。
LinuxKit
LinuxKit 这个工具可以将多个 Docker 镜像组成一个最小化、可自由定制的Linux 系统,最后的生成的系统只有几十 M 大小,可以很方便的在云端进行部署。