Noah's Blog

小内存使用Docker部署多个应用实录

2015-07-28

1-dockerlogo.png

前言

话说七月初在赵容部落上看到AcrosVM的低价美国VPS,顺便提供了优惠码。128M的KVM方案VPS年付不过72元人民币。考虑到博客放在Github Pages上有被墙的风险,加上最近也有几个项目要写,所以考虑购买个VPS用来部署。
最终我还是选择了256M的KVM方案,年付112元人民币。实际上OpenVZ的方案更便宜,但是不提供vSwap和突发内存,不够放心。
1-acrosvm.png

现状

这个VPS购买之后的体验的确不错,由于在Quodra.Net的机场,使用PCCW亚洲优化线路,速度相当不错,天津长宽最高ping只有300ms,闲时可达180ms,在优化得当和应用CDN的情况下比日本VPS相差不多。
现在,这个VPS部署着三个应用,还运行着监控系统和Docker Daemon,以及大家都懂的Shadowsocks。

系统环境: Ubuntu 12.04 x64 + Docker latest + Nginx 1.9 + NodeQuery

  • Noah’s Blog Powered by Hexo

    全静态文件使用Nginx访问

  • 模拟飞行助手官网

    主要是静态文件,使用PHP完成上传管理 Nginx前端,docker了一个php-fpm容器控制PHP部分

  • EAIPChina航图阅读器

    使用Node.js + Express编写,Nginx反向代理到node端口,node应用运行在一个标准Docker容器中

  • 海鸥Seagull Docker管理器

    运行在某端口上的容器管理系统

  • Shadowsocks

    都懂的:)Docker版本,参考:https://segmentfault.com/a/1190000002799579

    剩余资源:NodeQuery数据显示平均负载常态不超过20%,峰值最高50%,内存基本稳定140M/256M

    心得

  1. Docker是部署神器

    Docker的部署虽准备时间较长,但大多数情况下有现成的镜像可用,可能比使用现成二进制包的时间长,但节约了配置时间,更比编译部署节省时间。
    在最开始的时候我曾尝试过安装LNMP一键包,但是在小内存VPS上编译速度简直感人,后来尝试ubuntu apt二进制包,配置复杂不说,扩展安装也极其麻烦。
    直到接触了Docker,配置Typecho在有现成镜像的帮助下,20分钟就搞定了。
    当然任何事物有优点也有缺点,Docker现阶段的内存占用确实比直接安装大一些,但看起来比较稳定,不会大起大落,另外镜像构建需要下载不少文件,都比较大,推荐大家尝试DaoCloud,加速器功能在本地使用时有很大帮助,推送镜像也效果不错,不过关于自有主机管理方面,因为我自己是美国VPS,与国内DaoCloud服务器链接很慢,部署一个镜像可能需要好几个小时,而且安装监控面板会把默认下载地址改成国内加速地址,反而降低下载速度,对于使用国内主机的朋友可能会更实用。
    另外,Docker只支持64位系统,想用小内存部署LNMP这样环境的话内存确实捉急。

    2.Nginx直接安装最方便

    由于这是生产环境,不会也最好不要随便停机,nginx的docker镜像象征意义大于实际意义,直接apt-get更方便。
    另外,网上一些文章给出的docker nginx的命令存在漏洞,1.9以后的Docker -v似乎只识别文件夹,nginx.conf并不能直接映射出来。

  2. Git部署很方便,配置需要时间

    参考了Berry在VPS上部署Hexo一文

    参见 鄙人的陋文 使用Git在VPS上部署代码

    总结

    在小内存VPS上部署应用时,如果主要是部署PHP+MySQL应用的话,仍然建议使用LNMP方案,当主要用途是安置访问量不大的python/node.js应用和纯静态应用时可以考虑使用x64系统+Docker+Nginx前端,如果应用访问量足够大,数据量快速增多时也可以迁移Docker镜像,用Nginx在前端反向代理就好。