无意中看到某位同学发表的关于Docker的看法,我忍不住想说几句。作为一个研究/应用Docker快一年的开发人员,对楼上同学的质疑说几句吧:
1. 第一个问题,base image有bug,业务image怎么办?
一般来说,Docker的base image可以做得足够小,只包含最基础的系统软件和应用程序(当然也可以做得很全),比如,对于C程序,base image只需要一个glibc可能就足够了。另外,基础系统软件有bug的概率本身比较小。但如果出现了呢,比如前段时间出现的glibc的漏洞,我能想到两种选择:一是业务image自己修复,升级一个glibc是一个很容易的事。二是base image修复,业务image重新构建,因为Docker有Dockerfile,所以,基于新的base image重新构建业务image几乎不需要修改。
而且,由于Docker使用分层镜像,所以镜像的层次一般不要太深,到一定时候,就需要image做压缩,所以,在Docker中,构建镜像是一件非常简单快乐的事情,因为你需要一个Makefile(Dockerfile)就好了。
2. 网络问题
Docker(容器技术)可以几乎完全重用已经在XEN/KVM等虚拟机技术中使用的虚拟网络技术,bridge、veth、VXLAN等等。。。甚至连SR-IOV都是没有问题的。我们在实际业务中完全使用了XEN的虚拟网络模型。。。
3. 磁盘IO
Cgroup本身已经提供了丰富的IO throttle功能,只是Docker本身没有直接使用,但通过Cgroup的接口,很容易实现。我们在实际业务已经使用。这完全谈不上弱项不弱项的问题。
4. quota
说白了,Docker只是一个用户态的壳,核心的持术(namespace、cgroup)都是在内核实现的。即使Docker不支持磁盘quota,通过文件系统,比如XFS,LVM等可以很容易的实现。我们在实际业务通过XFS的quota实现磁盘空间的quota。
最后,谈谈我对Docker的理解吧。
Docker最大的创新在于image,image是开发、测试、运维之间的标准,运维再也不用关心开发交付的东西到底是C、C++、还是go,是tar包、还是一个文件夹,所有东西通过image标准化起来。标准化是生产力的前提。。。
个人觉得,技术人员应该对新技术抱有敬畏之心,在没有进行过深入研究、实践的前提下,就对一个新出现技术妄下结论,是不明智的。
这里引自 http://weibo.com/p/1001603840009324085358 ,如有冒犯请多包涵。