说起生态, 不禁让人想起贾跃亭的乐视, 想当初我多次被它的生态布局给震撼到, 一度相信它将要超越百度, 坐拥互联网三大江山的宝座, 但没过时日, 各种劲爆的新闻就把它推到了风口浪尖上, 现在想想也是让人唏嘘, 但不管怎么说, 愿它好吧, 毕竟这种敢想敢做的精神还是值得敬佩的.
回到技术这个领域, 不得不说, 技术更新迭代的速度快得让人应接不暇, 就容器技术这个领域来说, 从 Docker 面世短短的 2-3 年时间里, 就衍生出多种与之相关的技术框架, 由此形成了一个小小的生态系统.
一谈到容器, 大家都会想到 Docker, 本文也主要从 Docker 角度来讲容器生态系统.
容器基础技术
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 呈现这么好的内容.
来源: https://www.cnblogs.com/bakari/p/8970553.html