Container技术一览
来自: http://dockone.io/article/1062
在Container技术生态中有很多成员,并在迅速发展,甚至很多经验丰富的专家也很难完全跟上其发展进度,初学者更是望其项背。为了让大家能对Container技术形成一个系统的认识,Sysdig(Sysdig是一家提供 Monitoring as a microservice服务的公司)对Container生态项目进行了系统性的分类整理。
目的是列出Container技术的核心技术,尽量做到MECE(mutually exclusive and collectively exhaustive,相互独立,完全穷尽),共分为四个部分:
- Core Container Technologies:通过这些工具可以在单机上运行少量的容器;
- Distributed Container Technologies:用这些技术可以在一个分布式的容器集群中运行应用;
- Container Platform Technologies:这些技术可以打造一个完整的平台,用来在容器集群中运行分布式应用;
- Container-Native SupportTechnologies:这些技术可以帮助管理基于Container的基础设施,且专门为Container打造。
每一部分又被细分为具体的技术,每项具体的技术又包括四个来源:Docker的开源技术,CoreOS的开源技术,其它开源技术和商业版本。
1. Core Container Technologies
Container Specification
标准『container』的抽象定义,可以通过多个可替代的runtime实现,使生态圈内的技术都支持标准的容器。
- Docker Open Source
- Open Container spec:container runtime的开放工业标准,得到了Docker,CoreOS和产业大佬的支持,由 Open Container Initiative(OCI)(由Linux基金会运营)制定,目前已经抛弃了CoreOS的AppC标准;
- CoreOS Open Source
- AppC(不建议):CoreOS现在也支持OCI。
Container runtimes
这是你真实运行的容器(本质上是一系列Linux内核组件的抽象,比如namespace和cgroups)。
- Docker Open Source
- runc:Docker容器的runtime,已经贡献给了OCI作为标准实现的最初版本,本质上是libcontainer的重新打包;
- libcontainer:一个Linux容器库,抽象Linux内核组件的交互,创建和控制容器;
- CoreOS Open Source
- rkt:CoreOS的container runtime。最初是一个AppC specification的实现,AppC specification现已并入OCI spec;
- Other Open Source
- OpenVZ:一个Linux Container的库
- LXC:一个container库,最初被runC采用,直到libcontainer的发布
Container management
这些工具抽象了基本的对container runtime的控制,添加了更多的功能和可用性。
- Docker Open Source
- Docker Engine:Docker技术的核心及基本接口,创建和运行Docker容器,包括了Docker daemon和Docker client;
- CoreOS Open Source
- rkt CLI:rkt的容器管理,请求式提供,而不是运行在后台的守护进程;
- Other Open Source
- LXD:LXC的daemon和UI
- Libvirt:支持LXC,OpenVZ和一系列hypervisor技术的容器和虚拟换管理的库
Container definition
这些工具能让你定义一个特定的容器,从而实现保存,共享和复用。
- Docker Open Source
- Docker image:Docker container runtime就是从这些镜像中被创建的,镜像通过Dockerfile构建,在registry上被分享;
- Dockerfile:包含了创建一个Docker镜像所需命令行的文本文件;
- CoreOS Open Source
- ACI(App Container Image):rkt的容器镜像格式(rkt也支持Docker镜像)。
Registries
存储和共享container镜像的仓库。
- Docker Open Source
- Docker Registry:开源的Docker image registry可以被托管在自有的环境中;
- Commercial
- 灵雀云镜像中心( https://hub.alauda.cn/ );
- Amazon EC2 Container Registry (ECR)
- Docker Hub:Docker官方库免费版
- Google Container Registry
- Quay.io:CoreOS的托管平台
- Docker Trusted Registry
- CoreOS Enterprise Registry
Operating systems
为容器托管所设计的OS。
- Docker Open Source
- boot2docker:在PC和Mac上运行Docker的最小Linux虚拟机,现常被Docker Machine使用;
- CoreOS Open Source
- CoreOS:运行分布式,容器化应用的最小OS,包括etcd和fleet;
- Other Open Source
- RancherOS:最小的全容器化的OS;
- Project Atomic:最小的红帽Linux。有RHEL Atomic,CentOS Atomic和Fedora Atomic三个版本;
- Ubuntu Core “Snappy”:最小的Ubuntu版本;
- SmartOS:Joyent出品,基于Solaris的版本包含了Zones;
- Photon OS:VMware发布的最小OS版本。
VM management
这些工具帮助你管理容器运行的虚拟化环境。
- Docker Open Source
- Docker Machine:创建和管理运行Docker的主机VM环境(比如VirtualBox)和cloud VM(比如Amazon AWS,Google GCP);
- Other Open Source
- Hashicorp Vagrant:基于虚拟化和Docker技术,为开发环境创建提前配置的VM;
- Hashicorp Otto:扩展了Vagrant,跨平台部署和管理VM。
2.Distributed Container Technologies
Scheduling
这些工具在抽象的底层资源上管理新容器的配置。
- Docker Open Source
- Docker Swarm:旨在将Docker API扩展到集群规模,包括调度和服务发现;
- CoreOS Open Source
- fleet:CoreOS中的编排工具,支持基本的调度,也可以被bootstrap Kubernetes使用;
- Other Open Source
- Chronos:Mesos的调度框架。
Cluster definition
这些工具可以让你将容器集群作为一个整体,来定义和管理。
- Docker Open Source
- Docker Compose:在Docker容器的集群中,定义和配置一个分布式应用的文档
- CoreOS Open Source
- fleet unit file:fleet用一个特定版本的systemd unit文件,来定义多个容器组成的分布式应用;
Service discovery / Distributed configuration storage
这些工具让组成一个应用的不同容器能够互相访问和共享配置信息(比如IP地址或应用配置),通常通过一个全局的分布式KV存储实现。
- Docker Open Source
- Docker Swarm内置了service discovery,也可以用etcd,Consul和ZooKeeper实现;
- CoreOS Open Source
- etcd:全局的分布式KV存储,在CoreOS中用来实现service discovery;
- Other Open Source
- Marathon:在Mesos中初始化长时间运行的作业,包括了service discovery和管理功能;
- Hashicorp Consul:service discovery,K/V存储和集群健康监测;
- Apache ZooKeeper:全局的分布式KV存储。
Dynamic configuration management
这些工具可以根据分布式KV存储中的更新,动态去更新应用设置。
- CoreOS Open Source
- confd:最初为etcd而生,现在支持Consul和ZooKeeper;
- Other Open Source
- Consul Template:Consul原生的工具;
3.Container Platform Technologies
Container orchestration platforms
这些工具包含了容器集群管理的所有核心(上表列出的)功能,包括container management,scheduling,cluster definition和service discovery。
- Docker Open Source
- Docker Swarm,Compose和Machine三剑客,可以组成一个完整的编排平台,Docker Swarm还支持Kubernetes;
- Other Open Source
- Apache Mesos:成熟的,高扩展性的服务,可以将底层的资源抽象出来,并将应用变成分布式的任务;使用Marathon和Chronos实现集群管理,调度和service discovery;支持Kubernetes;
- Kubernetes:特别为容器集群上的微服务设计的编排平台;包括了调度,集群管理和service discovery,Google出品,现已贡献给了CNCF;
- Hashicorp Namad:使用了Consul。
Hosted container platforms
这些平台提供了容器托管和编排服务。
-
Commercial
- 灵雀云( http://www.alauda.cn/ );
- Amazon EC2 Container Service(ECS)
- Google Container Engine:使用了 Kubernetes;
- Tutum:已被Docker收购;
- Redhat Openshift:使用了Kubernetes;
- Joyent的Triton
- Giant Swarm
- ProfitBricks
- Modulus + Rackspace Carina
Container platform management
这些技术向分布式容器环境提供了更抽象的管理和控制层,通常是通过GUI。
- Docker Open Source
- Project Orca:专为Docker设计的GUI
- Other Open Source
- Rancher
- ContainerShip
- Panamax
- Shipyard
- Joyent SmartDataCenter:使用SmartOS
- Commercial
- Mesosphere DCOS:使用Mesos
- CoreOS Tectonic:使用 CoreOS+Kubernetes;
- Nirmata:跨云的容器管理,内置了调度,service discovery,动态负载均衡和基础设施优化;
- ContainerShip Enterprise
- StackEngine
- AppFormix
Container-based PaaS
这些平台通过管理应用代码部署和提供类PaaS的用户体验,更进一步抽象了基于容器的基础设施。
-
Other Open Source
- Deis:基于容器的PaaS使用了CoreOS;
- Flynn:基于容器的PaaS使用了etcd;
- RedHat Openshift Origin
- Cisco Mantl:使用了Mesos;
- Dokku:最轻量级的PaaS; + Empire:为AWS ECS而生的PaaS。
4.Container-Native SupportTechnologies
Networking
网络
- Docker Open Source
- Docker port expose:将容器端口链接到主机端口的Docker特性;
- Docker linking:提供同一主机上容器间相互连接的Docker特性;
- libnetwork:进一步的容器网络库;
- CoreOS Open Source
- flannel:通过etcd构建的overlay network,给每一个主机一个隔离的子网;
- Other Open Source
- Weave:将一个分布式系统中的所有容器,放到一个虚拟网络中的overlay network,同时包含了service discovery功能;
- Calico:为每个容器提供一个IP地址的3层虚拟网络。
Monitoring / Visibility
监控/可视化
- Docker Open Source
- Docker ps/top/stats:runtime的命令
- Docker stats API:容器性能监控的远程API
- Other Open Source
- sysdig:深度系统/容器可视化的CLI;
- cAdvisor:Google出品的收集容器运行时信息的工具,包含了GUI,Heapster为其添加了Kubernetes支持;
- Weave Scope:容器网络拓扑;
- Commercial
- Sysdig Cloud:使用了sysdig,包括web UI,应用拓扑,并且支持所有主流的容器技术。
Data layer
数据层
-
Other Open Source
- + ClusterHQ Flocker:为有状态服务提供数据卷管理。
Log management
日志管理
- Docker Open Source
- Docker logs:runtime command;
- Other Open Source
- logspout:Docker的日志转发。
CI/CD
持续集成/持续部署
-
Commercial
- Shippable + Wercker
Security
安全
- Other Open Source
- OpenSCAP
- Commercial
-
Twistlock
+Scalock
+Conjur
+Lynis
-
Getting started aides
入门助手
-
Docker Open Source
- Docker Kitematic:为Docker初学者设计的基本Docker GUI; + Docker Toolbox:核心Docker工具的安装器。