Docker简介
参考文献:使用Docker发布Rails程序
百度云BAE,用的就是Docker;另外京东云擎,使用的是CloudFoundry。
什么是Docker?
Docker是一个用来打包,装载和运行应用程序的一个轻量级容器的开源项目。它的工作方式非常像虚拟机,包裹所有的东西(文件系统,进程管理,环境变量等)在一个容器内。跟虚拟机有所不同,它是使用LXC(Linux kernel container)来替代虚拟层。 LXC没有自己的内核,但是与主机和其他容器一起共享Linux内核的。 基于LXC,因此Docker是非常轻量级的,因此在运行应用程序的时候几乎没有性能损失。
Docker同样提供了聪明的方法去管理你的images镜像。通过Dockerfile和自己的缓存机制,任何人都可以容易重新发布一个更新过的镜像而不用重新传输大量的数据。
为什么用Docker?
因为你从来都不知道你的应用程序能否在服务器上正常运行,就算你在本地已经测试和正常运行过了。那是因为服务器上的环境跟你的本地并非完全一致。比如RVM的设置,ruby和gem的版本差异。如果我们在发布前进行本地测试的时候,我们就已经确认如果在本地正常运行那它也能在服务器上正常运行,那我们会节省一些在服务器上debug错误的时间。
对于巨量的发布,使用虚拟机镜像是相对比较容易的。你可以在几分钟内创建一个虚拟机实例和应用你的镜像让它进行工作。除了便利性,它也有如下一些问题:
如果你只做了一个很小的更新可不得不提交一个完整的新镜像有很多的性能损失。你的应用程序可能运行在一个虚拟环境的VPS上,所以你不能运行一个虚拟机在已有的虚拟环境之上。
而在docker中,是各自独立的:
你不必再次更新整个镜像。Docker是基于AuFS,它将追踪整个文件系统的差异。
由于是运行在主机的kernel之上,所以性能损失忽略不计。
你可以将Docker运行在一个虚拟机上,因为Docker本身不是一个虚拟机。