本文首发于个人公众号 Linux云计算网络(id: cloud_dev),专一于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」便可领取,欢迎你们关注,二维码文末能够扫。html
提及生态,不由让人想起贾跃亭的乐视,想当初我屡次被它的生态布局给震撼到,一度相信它将要超越百度,坐拥互联网三大江山的宝座,但没过期日,各类劲爆的新闻就把它推到了风口浪尖上,如今想一想也是让人唏嘘,但无论怎么说,愿它好吧,毕竟这种敢想敢作的精神仍是值得敬佩的。docker
回到技术这个领域,不得不说,技术更新迭代的速度快得让人目不暇接,就容器技术这个领域来讲,从 Docker 面世短短的 2-3 年时间里,就衍生出多种与之相关的技术框架,由此造成了一个小小的生态系统。编程
一谈到容器,你们都会想到 Docker,本文也主要从 Docker 角度来说容器生态系统。ubuntu
Docker 的本质是利用 Linux 内核的 namespace 和 cgroups 机制,构建出一个隔离的进程(容器进程)。因此,容器的基础技术主要涉及到 Linux 内核的 namespace 和 cgroups 技术。安全
容器核心技术保证容器可以在主机上运行起来,包括容器规范、容器 runtime、容器管理工具、容器定义工具、Registry 和容器 OS。网络
容器规范旨在将多种容器(如 OpenVZ,rkt,Docker 等)融合在一块儿,解决各类兼容问题,为此还专门成立了一个叫 OCI(Open Container Initiative)的组织来专门制定相关的容器规范。框架
容器 runtime 是容器真正运行的地方,通常须要依赖内核,也有运行在专门制定的容器 OS 上,关于容器 OS,下面会作介绍。lxc 、runc 和 rkt 是目前三种主流的 runtime。分布式
lxc 是 Linux 上老牌的容器 runtime。Docker 最初也是用 lxc 做为 runtime。runc 是 Docker 本身开发的容器 runtime,符合 oci 规范,也是如今 Docker 的默认 runtime。rkt 是 CoreOS 开发的容器 runtime,符合 oci 规范,于是可以运行 Docker 的容器。微服务
容器管理工具是对外提供给用户的 CLI 接口,方便用户管理容器,对内与 runtime 交互。对应于不一样的 runtime,分别有三种不一样的管理工具:lxd、docker engine 和 rkt cli。工具
容器定义工具容许用户定义容器的内容和属性,如容器须要什么镜像,装载什么应用等。经常使用有三种工具:docker image、Dockerfile 和 ACL(App Container Image)。
docker image 是容器镜像,runtime 依据 docker image 建立容器。dockerfile 是包含若干命令的文本文件,能够经过这些命令建立出 docker image。ACI 与 docker image 相似,只不过它是由 CoreOS 开发的 rkt 容器的 image 格式。
Registry 是存放容器镜像的仓库,包括 Docker Registry、Docker Hub 和 Quay.io,以及国内的 DaoCloud.io。企业能够用 Docker Registry 构建私有的 Registry。
容器 OS 不一样于 runtime,是专门制定出来运行容器的操做系统,与常规 OS 相比,容器 OS 一般体积更小,启动更快。由于是为容器定制的 OS,一般它们运行容器的效率会更高。目前已经存在很多容器 OS,CoreOS、atomic 和 ubuntu core 是其中的杰出表明。
随着容器部署的增多,容器也逐步过渡到容器云,容器平台技术就是让容器做为集群在分布式的环境中运行,包括了容器编排引擎、容器管理平台和基于容器的 PaaS。
容器编排引擎就是管理、调度容器在集群中运行,以保障资源的合理利用。有名的三大编排引擎为 docker swarm、kubernetes 和 mesos。其中,kubernetes 这两年脱颖而出,成为其中的佼佼者。
容器管理平台是在编排引擎之上更为通用的一个平台,它抽象了编排引擎的底层实现细节,可以支持多种编排引擎,提供友好的接口给用户,极大方便了管理。Rancher 和 ContainerShip 是容器管理平台的典型表明。
基于容器的 PaaS 基于容器的 PaaS 为微服务应用开发人员和公司提供了开发、部署和管理应用的平台,使用户没必要关心底层基础设施而专一于应用的开发。Deis、Flynn 和 Dokku 都是开源容器 PaaS 的表明。
容器的出现又从新让一些古老的技术焕发第二春,如监控、网络、数据管理、日志等技术,因为容器技术的不一样,须要制定相应的符合容器规范的技术框架,由此有了容器支持技术,用于支持容器提供更丰富能力的基础设施。
其中包括容器网络、服务发现、监控、数据管理、日志管理和安全性。
容器网络主要用于解决容器与容器之间,容器与其余实体之间的连通性和隔离性。包括 Docker 原生的网络解决方案 docker network,以及第三方的网络解决方案,如 flannel、weave 和 calico。
服务发现保证容器使用过程当中资源动态变化的感知性,如当负载增长时,集群会自动建立新的容器;负载减少,多余的容器会被销毁。容器也会根据 host 的资源使用状况在不一样 host 中迁移,容器的 IP 和端口也会随之发生变化。在这种动态环境下,就须要有一种机制来感知这种变化,服务发现就是作这样的工做。etcd、consul 和 zookeeper 是服务发现的典型解决方案。
监控室保证容器健康运行,且让用户实时了解应用运行状态的工具,除了 Docker 原生的监控工具 docker ps/top/stats 以外,也有第三方的监控方案,如 sysdig、cAdvisor/Heapster 和 Weave Scope 。
数据管理保证容器在不一样的 host 之间迁移时数据的动态迁移。有名的方案是 Flocker。
日志管理为问题排查和事件管理提供了重要依据。docker logs 是 Docker 原生的日志工具。而 logspout 对日志提供了路由功能,它能够收集不一样容器的日志并转发给其余工具进行后处理。
容器安全性保证容器的安全,不被攻击,OpenSCAP 可以对容器镜像进行扫描,发现潜在的漏洞。
PS:本文借鉴了知名云计算博主 CloudMan 的博文:
http://www.cnblogs.com/CloudMan6/p/6706546.html,感谢 CloudMan 呈现这么好的内容。
个人公众号 「Linux云计算网络」(id: cloud_dev) ,号内有 10T 书籍和视频资源,后台回复 「1024」 便可领取,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎你们关注。