@
KKKKKK 我觉得你说的不合理,身为 docker 技术的拥护者和实践者,我首先表示涨见识了, Vagrant 也能一定程度的运用在快发上。
0.LZ没有细说技术的细节,我稍微看了下(其实我用 docker 前也玩过 Vagrant 流浪汉),总的来说是利用了 Vagrant 的一个插件,将 DO 服务器作为"虚拟机"启动 Droplet ,是很值得肯定的有效玩法。
1. VagrantFile 基本上就是个 ruby 脚本,需要一定的知识作为基础(不然看不懂);相比 Dockerfile 是类似宏调用的 DSL ,学习成本较低(但是你要说 COPY 和 ADD 的区别的话,其实也是满麻烦的,你知道 WORKDIR 能自动创建文件夹么)
2. DO 的 Droplet 实际上是虚拟机啦,你说我在 DO 上开一个 docker Droplet 运行一个MC镜像。好吧,这两者有何不同。实际上用 Vagrant 启动的人家还自带 init 进程呢(我知道有 baseimage 啦,但是有多少能用的镜像是用 baseimage 作为基础的呢)。而且MC服务器是个非常吃内存的家伙,基本上开了MC的容器,共存的容器会挺可怜的,谁知道下一个被OOM的是谁?
3.说了那么多实际上,技术上的主要区别我觉得在于被初始化的脚本( Vagrant 中是 vm.Provision ),你有没有考虑守护进程的配置,服务出错的调试方案,防火墙配置,软件的定期更新,软件的优化,更在于这个项目本身的易读易改性,谁都不想照着本 500 页的手册页只为了编写一个 APP 是吧(向卡西欧图形计算器致敬)。个人以为 docker 这方面做的很好,比如我只需要在启动时配置“环境变量”就能决定我开哪个版本的服务器(超赞是吧 ;)),而无需触及启动脚本本身。
Extra. 但我看到一个弱点, Vagrant 的那个 DO 插件在自启时会下载后缀是 box 的虚拟机文件(类似于 docker 中的镜像,但是 docker 镜像可以是分成的,感谢 aufs ),这个文件已经3年没有更新了。盆友们,整整3年啊,就算你 bootstrap 的第一行命令能修复 heatbleed, shellshock,但是这肯定是要比 docker 镜像处理的时间长的,毕竟镜像的层能复用,能并行下载各层,而且更新也很轻巧。
TL,DR; 还是我 docker 大法好!