Warden 是目前CloudFoundry 中做为application 运行时的一种容器实现。Docker是另一种目前比较火热的高效、易于管理的容器。越来越多的人想要把Docker 应用于CloudFoundry中

本文主要对warden和docker进行对比,包括:实现方式以及其区别,最后说明如何在在下一代CloudFoundry V3版本中如何一起使用

相同之处

Warden和Docker 有内部实现机制上有很多相似之处,例如:

都是使用Cgroup进行资源使用限制、以及命名空间进行container与container间、与屋里主机间的隔离
都是使用分层的文件系统机制去管理在容器内部的文件系统,即每个容器的文件系统由两部分组成:容期间通用的 只读 的root 文件系统和每个容器独享的 可读写 的文件系统。
不同之处

Warden是Cloud Foundry的一部分, 所以它不需要支持许多的文件系统,目前支持AUFS和OverlayFS。而Docker覆盖了更多的目前市面上常用的文件系统,除以上两种外还有Btrfs、ZFS、VFS 以及支持devmapper(需要梯子)。

最主要的区别是在对容器的镜像管理上的区别。Warden的设计初衷是在运行appliction的时候,它所需要的依赖由buildpack提供,每一个容器的文件系统有2层: 只读的os的root文件系统,就应用来说可进行读写的文件系统,里面可以包含了所有的运行时依赖以及临时文件。

Garden (CF v3)

Garden是在Diego可以使用的新一代的CloudFoundry 后台容器运行时实现方案。Garden在设计思想上与Warden一样,但是通过Go语言进行了重构,而老的warden是由Ruby语言实现的。Garden使用了部分的Docker 的源代码,可以从docker中拉下镜像运行,完美兼容的docker。但是Garden目前并没有使用docker 来运行这些image,这些由于CF需要wshd 后台进程来访问处理application(cf files之类的操作)、监控application,但是这些在docker中还没有实现。

结语

目前Diego这一版本还在开发中,但是可以将Garden部署在CloudFoundry V2 版本中使用。总的来说,CF对docker的支持对于那些已经使用docker作为应用开发、交付的公司来说是个好消息,可以不需要进行任何改造,就可以迁移到CloudFoundry平台之上