100个容器周边项目,点亮你的容器集群技能树

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 大规模的容器技术运用从来不是一项独立工程,而是一个汇集虚拟化技术、容器编排、任务调度、操作系统、容器仓库、跨节点网络、分布式存储、动态扩缩、负载均衡、日志监控、故障自恢复等系统性难题的复杂有机体。随着Docker的诞生和Google等互联网公司的推波助澜,这个领域出现了一大批优秀的开源项目,它们在简化容器技术使用成本的同时,也经常使得刚刚接触容器时间不太长的开发者和企业用户感到不知所措。

dc2e2b5a887575d12cb596cbeda24a33c9d51ec0

扫码或点我直达 免费领


大规模的容器技术运用从来不是一项独立工程,而是一个汇集虚拟化技术、容器编排、任务调度、操作系统、容器仓库、跨节点网络、分布式存储、动态扩缩、负载均衡、日志监控、故障自恢复等系统性难题的复杂有机体。随着Docker的诞生和Google等互联网公司的推波助澜,这个领域出现了一大批优秀的开源项目,它们在简化容器技术使用成本的同时,也经常使得刚刚接触容器时间不太长的开发者和企业用户感到不知所措。

将知识分类是梳理零散信息的一种有效方式。对于容器技术的生态圈来说,其中涉及领域众多,有的项目横跨多个细分领域,有的项目则是针对特定场景需求定制的,难以对其功能类型做精确定义。不过,若仅考虑通用领域里的相关产品和工具,大致来说可以划分成14种主要类别。

1eb1c0f33f7dcfb3cbcffa9c3862af4ca47a1bea

以下将围绕容器生态,分别举例介绍这些类别中的典型开源项目,以及部分虽未开源但比较常用的100个周边产品。

1. 容器引擎

容器引擎是容器集群生态圈的核心部分,它是与内核Namespace和CGroup等功能直接交互,并提供相应API使得外部能够与之集成的工具或服务。Docker无疑是目前为止最成功、广泛最使用的容器引擎之一。实际上从1.12版本以后,Docker的容器化功能已经由独立的项目RunC来实现,但Docker仍作为一个开源产品为用户提供完整的容器化解决方案。此外,社区中还有许多容器引擎项目,例如:

  • 001. Docker:https://www.docker.com

  • 002. Rkt:https://coreos.com/rkt

  • 003. Systemd-nspawn:https://www.freedesktop.org/wiki/Software/systemd

  • 004. Hyper:https://hyper.sh

  • 005. Garden:https://github.com/cloudfoundry/garden

  • 006. LXC:https://linuxcontainers.org 

  • 007. Photon:https://github.com/vmware/photon

  • 008. Vagga:https://github.com/tailhook/vagga

  • 009. gVisor:https://github.com/google/gvisor

  • 010. Pouch:https://github.com/alibaba/pouch

这些项目只是众多支持不同平台和具有不同特性的容器引擎的冰山一角。例如Google曾经主导的lmctfy(http://lmctfy.io/)项目也是个十分优秀的容器引擎,然而该项目自2015年以后就不再被维护了。而最近Google刚刚开源的gVisor则是该领域中的新秀。另外值得一说的是,Hyper采用虚拟机的方式对环境进行隔离,并不是一种基于容器的隔离方案,但它能很好地与Docker或Kubernetes等容器集群技术相结合,取代其环境隔离的功能,因此也归属此列。

2. 监控和数据收集

由于容器基于内核的特殊隔离方式,对容器性能和状态的监控与虚拟机存在一些差别。传统的虚拟机监控工具,例如Nagios和Zabbix等,对容器监控的原生支持并不十分易用。而一些新起的开源项目对这种场景具有更友好的体验,例如:

  • 011. cAdvisor:https://github.com/google/cadvisor

  • 012. Sysdig:http://sysdig.org

  • 013. Prometheus:https://prometheus.io

  • 014. TICK-Stack:https://influxdata.com

  • 015. Docker-Alertd:https://github.com/deltaskelta/docker-alertd

  • 016. Grafana:https://grafana.com

其中的TICK-Stack指的是Influxdata推出的Telegraf、InfluxDB、Chronograf、Kapacitor四款开源工具,不过从1.0以后,这些工具在开源版基础上提供了企业版本,后者提供了例如高可用、云端存储等企业级功能。

3. 容器管理和界面工具

可视化是用户友好性十分重要的一部分,Shipyard和Decking是Docker早期时十分受欢迎的可视化工具,之后Docker也收购了Kitematic作为官方的容器管理UI。但随着容器应用集群化,早期的UI工具不再流行,一些针对特定集群平台定制的新型管理UI开始出现。例如Kubernetes官方推出了Dashboard项目用于可视化的管理集群,Cockpit则是红帽公司推出的Kubernetes集群管理界面。以下是其中一些开源的容器管理UI项目:

  • 017. Kitematic:https://kitematic.com

  • 018. DockerUI:https://github.com/crosbymichael/dockerui

  • 019. Panamax:http://panamax.io

  • 020. Rapid Dashboard:https://github.com/ozlerhakan/rapid

  • 021. Cockpit:http://cockpit-project.org

  • 022. Portainer:https://www.portainer.io

  • 023. Shipyard:http://shipyard-project.com

  • 024. Seagull:https://github.com/tobegit3hub/seagull

  • 025. Dockeron:https://github.com/dockeron/dockeron

  • 026. DockStation:https://dockstation.io

4. 基础设施集成

容器集群的实施是需要以硬件基础设施作为依托的,有些辅助工具能够简化这个过程。这些项目往往与具体的底层平台相关,例如:

  • 027. Nova-docker:https://github.com/stackforge/nova-docker

  • 028. Magnum:https://github.com/openstack/magnum

  • 029. Machine:https://docs.docker.com/machine

  • 030. Boot2Docker:https://github.com/boot2docker/boot2docker

  • 031. Clocker:https://github.com/brooklyncentral/clocker

  • 032. MaestroNG:https://github.com/signalfuse/maestro-ng

Nova-docker和Magnum都是在OpenStack集成容器集群的项目,不过目前OpenStack官方正在尝试通过让Kubernetes直接创建虚拟机的方式来统一它在IaaS层和CaaS层的差异,其中的Nova-docker已经被废弃了。Machine是Docker公司推出的基础设施管理工具,Boot2Docker曾经是在Windows和Mac上使用Docker的官方方案,但随着Docker 1.12版本发布了多种操作系统的发行版后,已经不再被推荐使用了。

5. 编排和调度

编排和调度是容器集群的基本功能,因此选择编排和调度工具实际上就是在选择容器集群的方案。以下是一些开源的容器任务编排调度工具:

  • 033. SwarmKit:https://github.com/docker/swarmkit

  • 034. Kubernetes:http://kubernetes.io

  • 035. Marathon:https://github.com/mesosphere/marathon

  • 036. Rancher:http://www.rancher.io

  • 037. Nomad:https://github.com/hashicorp/nomad

  • 038. OpenShift:https://www.openshift.com

  • 039. Crane:https://github.com/michaelsauter/crane

  • 040. Nebula:https://github.com/nebula-orchestrator

  • 041. GearD:http://openshift.github.io/geard

其中的OpenShift主要是指其3.0之后的发行版,它是红帽公司基于Kubernetes二次开发的集持续集成和交付于一体的容器集群方案,具有开源和商业两个版本。

6. 容器镜像仓库

镜像仓库是基于容器的在软件发布流程中必要的组成部分,Docker开源了其镜像仓库的最小实现,但对于企业级应用来说,它缺少了高可用、权限控制、管理界面等必要功能。Docker Hub和国内的许多容器云平台都提供了公有云的企业级仓库服务,社区中也有一些容器仓库的开源或免费的实现,例如:

  • 042. Repository:https://github.com/docker/distribution

  • 043. Nexus:http://www.sonatype.org/nexus

  • 044. Habor:http://vmware.github.io/harbor

  • 045. Portus:https://github.com/SUSE/Portus

  • 046. Docker Registry UI:https://github.com/atcol/docker-registry-ui

  • 047. Dragonfly:https://github.com/alibaba/Dragonfly

其中的Nexus是一种通用的软件包仓库解决方案,支持包括Maven、NPM、PIP、RPM等许多主流打包格式的分发和管理,它是在3.0以后的版本中开始支持作为Docker镜像仓库的。VMWare推出的Habor是目前相对常用的企业级开源Docker仓库解决方案。Portus和Docker Registry UI是基于官方Repository镜像仓库的界面化管理工具。Dragonfly是一款P2P协议的镜像分发工具,并非直接提供镜像存储功能,但也属于仓库辅助类的工具。

7. 服务发现和容器域名服务

服务发现和域名服务实际上是微服务架构和容器集群的调度工具所需的组件,它们在容器集群中十分常见,也是这个生态圈中举足轻重的一部分,以下是其中一些在实际工程中被提及较多的工具:

  • 048. Etcd:https://github.com/coreos/etcd

  • 049. Consul:http://www.consul.io

  • 050. ZooKeeper:https://zookeeper.apache.org

  • 051. Eureka:https://github.com/Netflix/eureka

  • 052. Traefik:https://traefik.io

  • 053. Muguet:https://github.com/mattallty/muguet

  • 054. Registrator:https://github.com/gliderlabs/registrator

  • 055. SkyDNS:https://github.com/skynetservices/skydns

8. 容器日志收集处理

和容器集群的监控一样,收集容器中的服务运行日志与虚拟机中的方式同样存在许多差异。目前Docker直接通过插件能够支持的日志收集工具包括Rsyslog、Splunk和Fluentd,虽然FileBeat不在此列,但由于其小巧便捷的部署机制,也得到了许多用户青睐。一些过去用于虚拟机的日志收集器,比如LogStash或Flume,同样能够使用与容器中的服务,但它们都不再是首选的方案。

  • 056. Splunk:https://www.splunk.com

  • 057. Fluentd:https://www.fluentd.org

  • 058. ElasticStack:https://www.elastic.co

  • 059. Flume:https://flume.apache.org

  • 060. Rsyslog:https://www.rsyslog.com/

ElasticStack是Beats、Logstash、ElasticSearch和Kibana四款开源项目的统称,这是一套十分流行的日志汇聚、处理、存储和展示的工具组合。其中的ElasticSearch和Kibana也可以与Fluentd配合,形成端到端日志处理方案。另外值得指出的是,Splunk并不是开源或免费的,但它在企业级日志处理方案中的应用十分广泛。

9. 容器相关的系统发行版

有些Linux发行版是为容器运行而优化的,Atomic和ClearLinux系统都属于此类。另一些Linux发行版在设计之初就充分地将容器机制融入了系统的架构理念,例如CoreOS。有的系统甚至将Docker作为系统的核心服务来管理其他用户进程,例如RancherOS和Hyper容器引擎所使用的操作系统。类似的项目还有许多,它们都是架设容器集群时十分称手的基础设施,例如:

  • 061. Container Linux:http://coreos.com

  • 062. Project Atomic:http://www.projectatomic.io

  • 063. RancherOS:http://rancher.com/rancher-os

  • 064. ClearLinux:https://clearlinux.org

  • 065. Photon OS:https://vmware.github.io/photon

  • 066. CargoOS:https://cargos.io

  • 067. SmartOS:https://www.joyent.com/smartos

10. 容器平台

容器平台是大规模容器运用的产物,它通常会与持续集成、持续交付的工具结合,成为连接上层应用服务和底层基础设施、帮助使用者快速实现从代码提交到产品上线全过程的端到端交付过程。以下是其中一些相关的开源项目:

  • 068. Deis:https://deis.com

  • 069. Flynn:http://flynn.io

  • 070. Dokku:https://github.com/progrium/dokku

  • 071. Fabric8:http://fabric8.io

  • 072. Kel:http://www.kelproject.com

  • 073. Nanobox:https://nanobox.io

  • 074. Tsuru:https://tsuru.io

除了这些开源的容器平台服务实现之外,互联网上还有许多在线按量付费的容器即服务平台,它们也是整个容器集群生态的一部分。

11. 容器网络

容器技术在解决环境隔离和配额问题的同时,也引入了网络层面的复杂性。由于使用了Network Namespace,每个容器都可以获得独立的IP地址,这对于单个主机的情况并无大碍,但对于容器集群的情况,IP地址的分配和互联就成为了新的问题。因此在设计容器集群时,通常需要专门为网络的连接方式加以考虑。常用的开源方案例如:

  • 075. Libnetwork:https://github.com/docker/libnetwork

  • 076. Flannel:https://github.com/coreos/flannel

  • 077. Calico:http://www.projectcalico.org

  • 078. Weave:https://github.com/zettio/weave

  • 079. Romana:http://romana.io

  • 080. Canal:https://github.com/projectcalico/canal

  • 081. Open vSwitch:http://openvswitch.org

  • 082. Pipework:https://github.com/jpetazzo/pipework

这些网络方案大多采用了七层网络的Overlay Network方式,也就是在容器之间通信的网络包上封装了用于路由寻址的额外包头,这种方式会导致网络通信效率的下降,具体影响程度与所封装的额外数据大小有关。而Calico采用修改每个主机节点上的IPtables和路由表规则实现容器间数据路由和访问控制,属于三层网络的方式,这种方案在节点规模不太大(最多几百个节点)时的效率优势十分明显,是一种比较受推荐的容器网络工具。除了这些较常用的方案外,一些条件允许的企业也会结合MacVLAN等二层网络方案实现容器的互联,以获得更好的网络性能。

12. 容器安全

容器安全性问题的根源在于容器和宿主机共用内核,因此受攻击的面特别大。另外,如果容器里的应用导致Linux内核崩溃,整个宿主机系统都会崩溃,这一点与虚拟机是不同的。此外,镜像的安全性也是容器安全的一部分,如何保障用户下载的镜像是可信的、未被篡改过的,以及如何保证镜像中不会意外包含具有大量漏洞的老旧软件都是需要考虑的问题。目前这些安全课题主要在一些企业级应用中引起较多重视,下面是一些相关的开源工具和项目:

  • 083. Notary:https://github.com/docker/notary

  • 084. Clair:https://github.com/coreos/clair

  • 085. AppArmor:http://wiki.apparmor.net/index.php/Main_Page

  • 086. SELinux:https://selinuxproject.org

  • 087. Twistlock:https://www.twistlock.com

  • 088. OpenSCAP:https://github.com/OpenSCAP/container-compliance

13. 容器数据持久化

容器是一种不可变的基础设施,容器的数据应该通过Volume的方式保存到外部的介质上,容器持久化存储本质上就是要解决如何简便地将外部存储挂载到容器中使用的问题。Docker在1.9版本后提供了存储的插件,这也为许多存储方案提供了便利,以下列举几个例子:

  • 089. Flocker :https://github.com/clusterhq/flocker

  • 090. Convoy:https://github.com/rancher/convoy

  • 091. REX-Ray:https://github.com/codedellemc/rexray

  • 092. Netshare:https://github.com/ContainX/docker-volume-netshare

  • 093. OpenStorage:https://github.com/libopenstorage/openstorage

其中Ceph是通用的网络存储工具,同时提供块存储和对象存储能力,对容器化场景下的应用数据持久化具有良好的支持。

14. 容器相关开发流程工具

容器的镜像可以被看作一种新型的应用打包方式,因此容器常常与软件的开发和持续集成、持续交付流程相结合,提供不同环境一致性部署能力。以下是一些利用容器改善软件开发和交付的工具或平台:

  • 094. Drone.io:https://drone.io

  • 095. Shippable:http://shippable.com

  • 096. Cyclone:https://github.com/caicloud/cyclone

  • 097. Screwdriver:http://screwdriver.cd

  • 098. WatchTower:https://github.com/v2tec/watchtower

  • 099. Wercker:http://wercker.com

  • 100. Totem:http://totem.github.io

以上内容节选自近期刚刚面市的新书《容器即服务:从零构建企业级容器集群》,这是一本迄今为止最完整阐述容器集群技术及其周边生态体系的著作。其作者是来自阿里巴巴的一线技术专家,也一名从Lxc-Docker(最早的Docker 0.x版本)时期就开始在项目中运用容器的一线技术咨询师,目睹了容器技术从兴起到成熟的整个过程,在一次次的技术选型和实践里,亲身经历各类相关开源项目的大坑小洼,并多次在技术大会上进行过演讲分享(比较大型的会议包括2015年的CNut全球容器技术大会、2016年的CSDN架构技术实战峰会、2017年的CNut全球运维技术大会等)。全书分为8个章节,不仅囊括当前排名最靠前的4大主流开源容器集群方案,同时介绍了许多容器相关项目的技术选型和原理细节,具体目录列举如下:

  • 第1章 容器集群综述

  • 第2章 SwarmKit 集群解决方案

  • 第3章 Kubernetes 集群解决方案

  • 第4章 Mesos 集群解决方案

  • 第5章 Rancher 集群解决方案

  • 第6章 容器集群的网络和存储

  • 第7章 容器服务的基础设施

  • 第8章 容器技术新风向

学会一项技术很快,但学懂一门技术则需要时间的积累,做到知其然并知其所以然是一段辛苦而快乐的过程。愿《容器即服务:从零构建企业级容器集群》能够为你的容器学习之路铺上一块稳固的基石。

这本书目前已经上市,在当当、亚马逊等商城均可直接购买。同时欢迎对容器及研发效能有兴趣的同学与我们联系,阿里巴巴研发效能事业部期待你的加入,关注云效微信公众号(ali_yunxiao)回复“招聘”加入我们。

——粉丝福利——

在企业级的容器应用场景中,你有怎样心得或者困惑,赶快微信图文消息留言区互动告诉我。本书作者林帆将在互动区跟大家互动沟通,其中点赞数最多的回复将获得由作者签名赠送珍藏版《容器即服务:从零构建企业级容器集群》书籍一本,限2人。

4df9cd5abe6b65bd1d7c1631a12c4cbd0879738e


- MORE | 更多相关文章 -


云效+ 容器服务完成持续集成

阿里容器调度系统Sigma仿真平台Cerebro揭秘

阿里巴巴正式开源其自研容器技术Pouch

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
7月前
|
IDE 开发工具 Windows
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RowSplit容器组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RowSplit容器组件
160 0
|
4天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
20 3
实战~如何组织一个多容器项目docker-compose
|
26天前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
2月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
91 3
|
1月前
|
人工智能 Anolis 开发者
|
2月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--k8s集群使用容器镜像仓库Harbor
本文介绍了在CentOS 7.9环境下部署Harbor容器镜像仓库,并将其集成到Kubernetes集群的过程。环境中包含一台Master节点和两台Node节点,均已部署好K8s集群。首先详细讲述了在Harbor节点上安装Docker和docker-compose,接着通过下载Harbor离线安装包并配置相关参数完成Harbor的部署。随后介绍了如何通过secret和serviceaccount两种方式让Kubernetes集群使用Harbor作为镜像仓库,包括创建secret、配置节点、上传镜像以及创建Pod等步骤。最后验证了Pod能否成功从Harbor拉取镜像运行。
141 0
|
5月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB产品使用问题之原PolarDB-X集群无法连接且Docker容器已经被删除,如何恢复数据
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
7月前
|
存储 Java Serverless
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
|
6月前
|
Java Docker 容器
springboot项目容器化
springboot项目容器化
|
7月前
|
运维 Kubernetes Cloud Native
为什么需要容器集群
小陈打算将使用Docker构建的WordPress网站部署到生产环境,但他意识到单个容器可能无法应对潜在的故障、升级需求和高用户访问量。大刘建议小陈采用容器集群,这样能保证服务的持续性和弹性。容器集群通过自动化管理工具,如Kubernetes,简化了多容器的部署和协调,解决了扩展性、服务连续性和监控等问题。随着容器技术的发展,Kubernetes已成为主流的容器编排工具。
下一篇
DataWorks