Docker是在虚拟容器中简易部署应用最前沿技术。之前我们已经知道Docker可以减少开发维护复杂度,使得正在成长中的架构得以实践。这种架构使得整个应用以及底层操作系统以轻量级容器方式创建和部署,而不是依靠增量式的更改。
考虑到过去三年Docker取得的骄人成绩以及远程API的成熟,毫无疑问,Docker会成为开发者的***平台。
随着Docker的发展壮大,开发者也共享了很多围绕docker的开源项目,本文中将讨论这些项目是如何使用Docker API的。
Dogfooding
DokcerAPI***的用户就是Docker本身,Dokcer内置了很多整合与编排容器配置的工具。Dockercompose面向多容器应用部署,而Docker Swarm则负责Docker容器集群创建。
Docker自身在这一领域做的很好,但是仍然对其它Docker编排技术持开放态度。编排领域涉及面很广泛,包括调度、集群,服务发现以及其它一些任务。考虑到有效性,透明性,以及依赖性,一般不希望几个进程运行在同一个容器内;实际使用中,每个容器只负责处理定义清楚的服务。因此一个完整的应用一般由多个Docker容器构成,这也是基于Docker的解决方案非常丰富的原因。
调度--Scheduling
Docker容器调度也是容器编排中重要的一环,这里所说的调度是指容器如何在各个主机之间运行的规则。例如,一个调度策略可能会牵涉到运行在同一个主机中的不同容器,而其功能是互补的。因为有了调度策略,可以从一个应用中抽象出两个集群行为的容器。
除了DockerSwarm的调度功能,CoreOS的Fleet和Marathon都是Docker调度开源实现。
如想深入了解容器架构,可以深入阅读API-Driven DevOps: Spotlight on Docker
集群管理 Cluster Management
集群意味着将很多主机内的众多Docker容器联系起来,使它们表现为一个统一调度的系统。
对应于Docker Swarm的开源项目包括 Google的Kubernetes, 通过Docker容器的pods来管理集群,其它的还包括Shipyard,CoreOS的Fleet和Marathon。
像Spotify这种公司开发并开源了自己的Docker管理系统,而这正是每个基于Docker系统必需的。
服务发现Service Discovery
服务发现是在一个多主机、集群环境的网络中,如何发现所需服务的IP地址,像GliderLabs这样的公司利用Docker的远程API侦听事件,创建基于容器的软件应用。Registrator,一家由Weave支持的开源项目,可以通过监控新建Docker容器,将它们在目录服务Consul中注册,提供发现服务。
网络Networking
为了链接构成服务的容器,Docker也提供一些网络功能。默认地virtual bridge网络被激活,同时也可以用不同的配置。提供商提供了适用于其他使用场景的网络配置。
Weave使用一种称为imicro-routers的虚拟网络跨主机连接容器,使得网络配置简化,动态添加节点,通讯加密。Weave还提供一个叫Weave Scope的网络监控功能。
Flannel是CoreOS提出的overley网络解决方案,使用etcd集群来存储网络配置。
Calico项目另外一个基于‘Layer3’网络的开源项目,这不是一个overlay网络,意味着OSI模型三层以上都不会封装包,相对于其他方案会大大提高性能。
存储Storage
Docker在数据库领域并不太成熟,这是因为按照定义数据库是经常变化的,因此运行数据库的容器不能简单被重新部署而不比较数据一致性。针对这一问题Docker内置基于数据卷和数据卷容器的解决方案。数据卷在容器被删除时,数据仍然是持久化的。数据卷容器可以在多个容器之间共享数据时候使用。
数据卷可以被备份和恢复;像ClusterHQ的Flocker产品,就是一个开源的数据卷管理器,而且为了支持基于容器的数据库,提供数据迁移功能。
持续集成Continuous Integration
为了更好管理Docker容器创建,测试和部署的生命周期,有很多针对持续集成(CI)领域的工具。例如,CodeFresh可以监测Git库中变化,或者持续集成服务器中变化,从而触发创建和部署Docker容器,
CodeShip的Jet是面向Docker的CI平台,可以从任何Docker注册库中拉images,与DockerCompose整合,便于并发创建和部署基于容器的应用。
Drone是另外一个基于Docker的持续集成平台,它在创建过程中使用一个短暂生成的容器。
如需了解,可以阅读如下网址:Continuous Integration Tools to Spur API Development
Hosted Docker Registries
除了DockerHub之外,还有几家公司提供Docker注册库服务,例如Quay.io, Artifactory和Google的Container Registry。这些服务提供私有的容器注册库访问,提供高级库功能,第三方整合和***DevOps体验。
日志整合Log Aggregation
Logspout是GliderLabs的另外一个开源项目。当几个Docker容器共享一个主机时,Logspout将日志路由并汇总到类似PaperTrail的日志管理系统。另外,Filebeat可以对容器日志打上标签并发往logstash。
监控Monitoring
大量第三方的,由业界云监控大厂开发的,基于Docker的监控工具,一般都是用Docker静态API,并将结果显示在动态仪表盘上。
这些监控方案包括:
• AppDynamics的Docker扩展 Docker extension by AppDynamics,
• DataDog agent,
• first-class citizen treatment of Docker containers in New Relic,
• Scout’s Docker agent
配置管理Configuration Management
Docker可以通过标签方式(labels)给图像、容器和进程(守护进程)添加客制化元数据。标签类似于key-value对,可以被用于标注配置信息,例如版本号和环境信息。
为了避免名字冲突,Docker鼓励在标签中使用命名空间,但是并不强制。DockerLabelinspector是GarethRushgrove(PuppetLabs的资深工程师 )开发的应用,可以根据发布指南或者指定JSON Schema检查发布的Docker映像。
安全审计Security Auditing
很多问题都围绕基于Docker应用的安全问题,尽管过去很多年已经补上了很多漏洞,但是开发商提供的Docker应用带来了更多安全问题。一个例子是Scalock,这是一款扫描容器发现安全问题的软件,并且控制对容器访问,监控容器运行状态使得不会破坏安全设置。
PaaS
越来越多的基于Docker软件,造成了整合性的困难,同时也是一个生态系统发展良好的预兆。很多公司瞄准了这一需求,将赌注压在端到端类PaaS的方案,用来创建,部署,编排和监控基于Docker的应用,从而将复杂性隐藏起来。
Openshift是RedHat的PaaS方案,构建于Docker和Kubernetes之上。Deis是EngineYard开发,由Heroku驱动的PaaS方案,构建于Docker和CoreOS之上,Paz是基于Docker、CoreOS、etcd和Fleet的开源项目,可以将容器应用运行于PaaS之上。
***,Docker最近收购了Tutum(类似PaaS的套件,用于部署和管理Docker引擎),重新命名为Docker Cloud。
Full-blown OS
由于Docker发展太迅猛,已经有先行者开始使用容器做整个操作系统。Rancher的RancherOS是一个完全基于Docker的轻量级操作系统,它是专为运行基于容器应用的20MB大小的Linux发行版。
HypriotOS是在树莓派上使用的Docker实现,允许在SD卡上运行轻量级容器应用。
结论Conclusion
Docker的创生诞生了DevOps软件生态环境,随着Docker应用不断增加,看起来这个增长势头在未来会更加强劲。在下一篇文章中,我们将会深入DevOps其它领域,也就是持续集成和配置管理。