Docker怪像


【编者的话】Docker是个好东西,应用的时候充分考虑自己的使用环境、场景,不要动不动就FROM ubuntu、debian、centos,语句精简,递进逻辑结构,构建微服务,运维各方面你都会发现省成本,一个小小的2048游戏足以说明问题。

Docker是个好东西毋庸置疑,甚至可以称其为万金油,什么场合都看到他的身影,自14年底开始,个人也是小到防污染的DNS、CoreOS的socks5代理,大点到开发团队的CI系统,一些Web项目等等,都有在用,并且稳定性非常好,使用起来也方便,但是最近经常发现各大论坛、网站、文档在使用Docker镜像的时候常常发现的一个误区,谨以此文抛砖引玉。

让我们从一个dockerfile说起,缘起我5月写的一个2048的Docker镜像,当时是在csphere的群里,以游戏的形式,教人快速的集成Web服务,提供服务(顺带给利俊的csphere广告一下,www.csphere.cn,还定期提供免费虚机免费视频培训,业界良心)。我们首先来看一个传统的镜像写法:
FROM ubuntu:12.04
RUN apt-get update
RUN apt-get install -y nginx zip curl
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN curl -o /usr/share/nginx/www/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master
RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip
EXPOSE 80
CMD ["/usr/sbin/nginx", "-c", "/etc/nginx/nginx.conf"]

解读一下:
基于ubuntu12.04,先来一个更新,然后安装nginx、zip、curl,配置nginx,下载2048代码,解压再放到指定位置,删除原始文件,抛出80端口,最后是执行命令。

这样的dockerfile再熟悉不过了吧,随便docker hub或者其他教学文档都是这样,接下来,我们来谈谈中间的毛病。

1、pull一个ubuntu需要多少时间,占多大的空间?(初学者好多在这一步就头痛)2、ubuntu在没有添加中国镜像源的情况,更新是个多么痛苦的事?(灯,等等等等)3、配置啰嗦(麻烦,麻烦) 4、整个生成的镜像硕大无比,玩个2048不需要这么复杂。

光提问题,不给解决方案就是耍流氓,还是看dockerfile:
FROM alpine:latest

MAINTAINER alex alexwhen@gmail.com

RUN apk --update add nginx

COPY . /usr/share/nginx/html

EXPOSE 80

CMD [“nginx”, “-g”, “daemon off;”]

极简化的利用dockerfile和base镜像和github的特性,能少一句就少一句,动动手试一下,这样build出来,整个镜像不超过10M,回过头来看看前面的镜像,光一个ubuntu得多大啊,实在是居家必备。
屏幕快照_2015-07-15_上午10.14_.23_.png

Docker是个好东西,应用的时候充分考虑自己的使用环境,不要动不动就FROM ubuntu、debian、centos。alpine是一个非常好的base,包管理系统比较完善,神器啊。

本人的docker-2048,可以从以下方式获得:
1、github:https://github.com/alexwhen/docker-2048
注:你可以在此基础上玩出更多你想要的东西
2、直接运行: docker run -d -p 80:80 alexwhen/docker-2048 (本机80端口有占用的请换端口),然后打开浏览器输入127.0.0.1,你就可以愉快的玩了。
3、本镜像同样存在于alauda和daocloud。

写在最后,写这个本来是教一新人学写Dockerfile和快速的利用Docker云服务快速的构建出自己的应用。

8 个评论

啊哈 可以说是标题党么 不过内容还不错
哈哈,看怎么理解了,看过好多的dockerfile,全是大块头,有多复杂弄多复杂,难道不怪吗?
alpine基于busybox,放狗搜了下,似乎性能还不太好。我想问的是,2048用 alpine后,性能怎么样?
你可以试一下,完全没有感觉
标题党。。。你就是要提供一个新的base么,大家习惯而已。。在存储这么低廉的情况下,几百兆还玩不起?
几百兆算好的了,见到过build 出来的image有1.2G,自己玩和在企业中用,需求终究是不一样的。
贯穿全部的不仅仅是一个base,而是simple is better,dockerfile的易读性,逻辑的递进全部有考虑,如果只是让你觉得是标题党,那么是我没写好
还有,一百个容器的时候是什么情况,一千个呢,十万个呢?目光看远点

要回复文章请先登录注册