专栏首页aCloudDeveloper容器生态系统

容器生态系统

PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家。

说起生态,不禁让人想起贾跃亭的乐视,想当初我多次被它的生态布局给震撼到,一度相信它将要超越百度,坐拥互联网三大江山的宝座,但没过时日,各种劲爆的新闻就把它推到了风口浪尖上,现在想想也是让人唏嘘,但不管怎么说,愿它好吧,毕竟这种敢想敢做的精神还是值得敬佩的。

回到技术这个领域,不得不说,技术更新迭代的速度快得让人应接不暇,就容器技术这个领域来说,从 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 呈现这么好的内容。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 容器进化史

    和虚拟机一样,容器技术也是一种资源隔离的虚拟化技术。我们追溯它的历史,会发现它的技术雏形早已有之。 容器简史 容器概念始于 1979 年提出的 UNIX chr...

    CloudDeveloper
  • 容器生态系统

    CloudDeveloper
  • Linux 下实践 VxLAN:虚拟机和 Docker 场景

    在上篇文章中,我们已经探讨了 VxLAN 的概念和基本原理,本文就基于 Linux 对 VxLAN 做一个实践。如果有相关概念不懂的可以先看那篇文章。

    CloudDeveloper
  • 深入玩转K8S之智能化的业务弹性伸缩和滚动更新操作

    在上篇我们讲到了较为傻瓜初级的弹性伸缩和滚动更新,那么接下来我们来看看较为高级的智能的滚动更新。本节的知识点呢是K8S的liveness和readiness探测...

    DevinGeng
  • 容器采用时最常见的N个挑战该如何克服?

    虽然容器技术势头不减,但仍然没有在企业中被广泛采用。虽然许多DevOps团队正在尝试使用容器并将此技术慢慢引入生产环境中来,但大多数组织机构仍然不知道从哪里开始...

    静一
  • 支持100+业务线、累计发布17万次|宜信容器云的A点与B点(分享实录)

    宜信公司从2018年初开始建设容器云,至今,容器云的常用基本功能已经趋于完善,主要包括服务管理、应用商店、Nginx配置、存储管理、CI/CD、权限管理等,支持...

    宜信技术学院
  • 容器进化史

    和虚拟机一样,容器技术也是一种资源隔离的虚拟化技术。我们追溯它的历史,会发现它的技术雏形早已有之。 容器简史 容器概念始于 1979 年提出的 UNIX chr...

    CloudDeveloper
  • [docker](八)docker -- 网络管理

    如图所示,Docker daemon通过调用libnetwork对外提供的API完成网络的创建和管理等功能。libnetwork中则使用了CNM来完成网络功能的...

    baron
  • 为什么保护容器和微服务很难?

    开发人员可用容器创建微服务,也就是应用的可重用组件。因为可重用,微服务能帮开发人员免掉重新开发的时间。另外,微服务可跨不同平台部署。

    用户6543014
  • 关于容器、微服务、docker的十大问题

    容器的运行无法简单参考虚拟机的实践经验。例如,几乎任何工作负载都可以立即虚拟化,但是有些工作负载适合容器化部署,有的则不适合。

    FB客服

扫码关注云+社区

领取腾讯云代金券