[DaoCloud用户分享] 鲸鱼与集装箱的故事

今天转载一篇DaoCloud用户Jinwei同学的分享,Jinwei是一位在杭州读书的大二学生,自称“Github脑残粉,开源爱好者,伪文青”。在我们看来,Jinwie是一位拥抱新技术、敢于尝试挑战、充满正能量的优秀90后,他最近撰文记录了DaoCloud平台的使用经历,虽然一波三折,遇到了一些问题,但最后都得以顺利解决。

DaoCloud近期已经开放公测,我们借此文,感谢DaoCloud的早期用户,我们的平台虽然经过严格测试,但肯定还存在这样和那样的缺陷,感谢所有用户的宽容,支持和反馈,是你们的努力推动DaoCloud不断完善。

我们也欢迎更多DaoCloud用户分享您的使用经历和心得!

====以下为转载内容,原文请点击此链接====

第一次听到Docker这个名词是在什么时候已经记不清了。只记得在2014年,围绕Docker的生态圈突然就火了。虽然我一直都保持开放的态度面对新技术,但是对于Docker这种突如其来的爆发我还是怀有一定的戒备心理的。“先静静围观一下吧”。

第一次在自己电脑上尝试安装Docker是在2014年8月。那时候在参与一个Online Judge平台的开发。由于OJ系统需要处理用户提交的代码,考虑到如何处理安全性的问题,当时有一个想法是,把用户提交的代码跑在Docker容器里面。这样即使发生安全性的问题对宿主机也不会有太大的影响。不过由于当时Docker的生态还没有现在这么成熟,几番尝试之后还是放弃了。

与Docker的第二次亲密接触,大概是发生在2014年的12月份。当时应该是在InfoQ看到了孙宏亮写的Docker专栏,深入到Docker底层Go代码的实现,一看署名邮箱,DaoCloud.io,于是这就成为了我与DaoCloud的第一次亲密接触。当时DaoCloud已经推出了加速器服务。试用结果确实让人满意。从那时就开始默默关注这家创业公司的发展了。

1

2015年5月7日是这篇文章的转折点。DaoCloud应用管理平台开始公测。可以对接GitHub的代码源,一站式构建镜像,部署,发布。虽然在这之前我对于编写Dockerfile的战斗力值几乎为零,但是DaoCloud的“跑容器送T-Shirt”的口号吸引着我。于是我便开始了与Docker这条鲸鱼玩耍的过程。

2

其实从我开始写Dockerfile到容器真正在DaoCloud的平台上跑起来,中间还是经历了不少曲折。一开始,由于对Dockerfile的语法不熟,构建镜像的过程都频频失败。好在DaoCloud具备着战斗机一般的构建速度,使得这个过程没有那么痛苦了。不过第一天碰到了一个小插曲。在某一次构建镜像的末尾,系统的log显示一直停留在buffering to disk的阶段。持续了一个多小时后,由于超时而导致失败。后来和DaoCloud的客服沟通得知是内部网络的问题。不过后来这种问题就再也没有碰到过啦。我所使用的Dockerfile构建镜像的时间基本在10min以内,和Docker官方Docker Hub的构建速度相当,有时候比Docker Hub还要快很多。因为Docker Hub的pending时间有时候会相当长。一句话,DaoCloud,唯快不破!

镜像构建好之后部署的过程也并不顺利。一开始部署失败,系统只给我返回了“App Exited Unexpected”。没有更多了。这让我怎么定位错误嘛!和客服沟通的过程中得知,其实DaoCloud正在灰度上线一个详细log显示的功能。只不过由于我运气不好每次都调度到了没有上线详细log的节点。面对黑盒,如何排错?我只好在VPS上先搭一个Docker的环境,尽量把错误除尽,然后再到DaoCloud上测试。在VPS上测试的过程中发现导致问题的原因是,同一个Docker容器里面我启动的进程比较多,有点混乱。于是改用supervisord来管理进程之后,问题解决啦。

然而当我满心欢喜地在DaoCloud上启动容器的时候,系统却告诉我内存不够。我可是已经选了目前最大的256MB内存呢。心碎之余,仔细想想,go build的时候确实挺占内存的。(因为我在容器里跑的就是一个Go + MongoDB的应用,其实也就是我前文提到的Online Judge)。但是,我只能说,内存不够是小概率事件。因为我后来又重复了几次,内存不够的问题却再也不能复现了。容器示例请见Demo

总的来说,这几天的体验还是相当涨知识的。Docker本身就是很酷的新鲜事物,DaoCloud现在在中国所做的,同样是一件充满着极客精神的事情,配得起DaoCloud招程序员的时候所喊出的口号“我们只要战斗机!”。

那么最后,如果你还没有接触过Docker,请打开终端,大胆敲出你的第一行docker run吧!

Leave a Reply

Your email address will not be published. Required fields are marked *