服务项目:网站建设、仿站、程序开发、APP开发设计、移动网站开发设计、企业网站设计、电子商务网站开发、网站维护、网站推广、UX/UI 、HTML5、CSS3、JS / Jquery ...
四川浚浚科技有限公司
四川浚浚科技有限公司 (开发设计官网)TEL : 15308000360 / QQ : 38585404

您的位置:首页 > 技术经验 > 网站运维 > 正文

漫谈Docker-云时代的程序分发方式

在今年6月份,Docker刚爆出了一个容器逸出的漏洞注 19。不管是Hypervisor技术还是容器技术,安全问题始终都是一个不可避免的话题,虽然它们出问题的几率要比中间件软件(Apache,Nginx、Tomcat)和软件框架(Struts、Rails)等的概率要小很多。

注 19 http://blog.docker.com/category/security-2/

事后Docker, Inc.还是比较积极的面对了这件事,除了及时披露详细情况之外,还着重强调了他们的安全政策。

5.2.5. 有状态和无状态容器

在不可变基础设施(Immutable Infrastructure)里,一切都可以分为有状态(stateful)的和无状态(stateless)的,容器也不例外。容器似乎更适合跑无状态的服务,然而业内对如何分别对待这两种服务还没有太好的最佳实践。

5.3. 对Docker展望

最后再容笔者斗胆对Docker的将来做一些展望。除了Docker本身自己会蓬勃发展之外,围绕Docker的生态圈必将更加成熟和强大。

5.3.1. 集群管理(Orchestration)和服务发现(Service Discovery)

相对于对单台机器进行Provisioning而言,云环境下则需要对多台机器进行Orchestration。Orchestration这个词翻译过来就是编排、编配的意思,我们也可以理解为集群管理。它主要由两部分工作组成:

  • 监控服务器,发现变化(软硬件异常、网络异常、正常变更等)
  • 根据监视事件采取相应的行动。

服务发现

在松耦合的分布式环境下,应用程序不一定跑在同一台机上,甚至是跨越数据中心的。这时候服务发现就显得格外重要了。

  • Zookeeper

Chubby注 20可以称得上是很多服务发现、集群管理软件的鼻祖了,比如Zookeeper注 21,这些软件都提供数据存储、leader选举、元数据存储、分布式锁、事件监听(或watch,监视)等功能。

注 20 http://research.google.com/archive/chubby.html

注 21 http://zookeeper.apache.org/

  • etcd

etcd注 22很新也很轻量,安装很简单,配置也不复杂,所以非常适合入门。etcd存储的是key-value格式的数据。

etcd是CoreOS的一个组件。同时CoreOS提供了一个基于公有云的服务发现服务discovery.etcd.io。

注 22 https://github.com/coreos/etcd

此外,我们还可以有Skydns/Skydock注 23、Discoverd注 24等选择。

注 23 基于DNS的服务发现。https://github.com/crosbymichael/skydock

注 24 Flynn的一个组件,它目前是基于etcd的,但是也可以扩展诸如Zookeeper等分布式存储机制。https://github.com/flynn/discoverd

集群管理

围绕Docker使用场景的开源集群管理软件有很多,比如Geard、Fleet、Consul及Serf等,这些软件都是随着Docker应运而生的;此外还有很多老牌的集群管理软件,比如Mesos等也可以很好的结合Docker使用。

  • Serf和Consul

Serf注 25是一个基于Gossip协议去中心的服务器发现和集群管理工具,它非常轻量,高可用并具备容错机制。

注 25 http://www.serfdom.io/

Consul注 26是一个服务发现和集群配置共享的软件,除了K/V store功能之外,它还支持跨数据中心及容错功能,并能进行服务健康监测。

注 26 http://www.consul.io/

这两个软件都Vagrant作者所在公司HashiCorp注 27发布的产品,这个公司也值得大家关注。

注 27 http://www.hashicorp.com/products

  • Apache Mesos & Marathon & deimos & etc.

Mesos用于对多个节点的资源进行管理,它将多台服务器作为一台“虚拟机”看待,并在这台虚拟机上分配资源,用户通过使用framework进行资源管理。Marathon是一个Mesos的framework,用来启动、管理需要长时间运行的任务。deimos则是一个为Mesos准备的Docker插件。

其它工具

Cloud Foundry在5月份发布的Docker版的BOSH工具,有兴趣的读者可以参考一下Decker注 28项目。

注 28 Decker = Docker + Cloud Foundry. http://www.cloudcredo.com/decker-docker-cloud-foundry/

另外Clocker注 29这个项目也比较有意思,它基于Apache Brooklyn(目前还在孵化器中),能在多云环境下基于Docker容器进行应用部署。这个项目的扩展性很好,非常方便自己定制。不过项目还太年轻,要想使用的话恐怕还需要些时日。

注 29 https://github.com/brooklyncentral/clocker

5.3.2. 和OS的深度结合

在Fedora上使用的systemd注 30就已经提供了集成容器和虚拟机的功能。

注 30 systemd是用来替代Linux中init系统的系统软件,目前已经在Fedora/RHEL等中采用

Docker除了能在各种主流Linux上使用之外,还出现了有专为运行Docker容器而定制的OS了,比如CoreOS注 31,RedHat的Atomic注 32。

注 31 https://coreos.com/ ,在6月末刚刚宣布获得了八百万美元的A轮融资
注 32 http://www.projectatomic.io/

CoreOS

CoreOS是一个精简版的Linux,可以运行在既有硬件或者云上,它也是一个最近备受关注的项目。CoreOS不提供类似yum或者apt类似的包管理工具,你不需要在CoreOS中安装软件,而是让程序都在Docker容器中去运行。CoreOS使用systemd和fleet来对容器进行管理,通过etcd进行服务发现和配置信息共享。

Atomic

Project Atomic是最近才发布的一个项目,它也是一个瘦身版的Linux,只包含systemd/geard注 33/rpm-OSTree以及Docker组件,专门用来部署和管理Docker容器。它能在接近硬件裸机级别上高性能的运行大量容器,而且它还是基于SELinux的,在安全上也有保障。

注 33 http://openshift.github.io/geard/

5.3.3. Container技术规范化和兼容性

就在DockerCon14开始的前一天,Flynn发布了Pinkerton,一个支持在其它容器中使用Docker镜像的技术。

而另一方面,我们知道除了LXC,Docker之外,还有很多其它容器技术,比如Zones,jail和LMCTFY等,那么试想这么多的容器之上,是否有统一接口、互相兼容或者在容器上加一层封装的可能性呢?比如让一种容器的镜像,能运行到其它容器中?Docker容器已经能互相连接了,会不会异构的容器之间也能进行某种交互呢?

6. 总结

Docker虽然入门和使用起来非常简单,但整个生态系统还是挺庞大的,而且其底层技术也都很复杂,由于篇幅有限及笔者学识不精,也只能说一些皮毛之事,最多只能算是抛块砖而已;而且笔者也有一种意犹未尽的感觉,但是由于篇幅所限,不能说到面面俱到,更多的内容,还请各位读者自己去深入挖掘。

总之笔者认为Docker还是非常有趣的一个东西,值得大家花些时间体验一下,相信在各位的工作中多多少少都能用的上Docker




上一篇:亿级Web系统搭建—单机到分布式集群
下一篇:重新思考数据中心网络

相关热词搜索:docker 分发方式