Container技术一览

OdeSwint 9年前

来自: 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工具的安装器。