@左耳朵耗子的文章,有个“资深专家”来问我问题,把我问怒了

jopen 10年前

昨晚,有个资深专家专问来找我讨论docker,他说他知道我在做一些docker的工作,所以,想来和我了解一下docker的情况。我一开始就问他主要想要解决什么样的问题?他说,主要是想解决资源隔离的事情。我说,资源隔离的事,Hypervisor或LXC就可以干了,不一定要用 docker啊?虽然docker也可以干这事,不过,我认为docker是基于LXC上的一个提供更强大的运维功能的Bridge。

然后,他问我,什么是Hypervisor,什么是LXC?什么是VM,什么是Container?于是我简单的科普了一下。

接下来,他问我,为什么LXC要比Hypervisor要快?于是,我又科普了一下。在科普LXC的时候,我和他说,这就像chroot一样,结果他问我,你说的那个ch什么t的是个什么东西?我说,是change root,他说,什么是change root?,我说把你jail到一个目录下。他问我,这是怎么做到的?于是我又废了半天劲。

再接下来,他问我,docker的那个A什么FS是什么东西?于是我又科普了下,我又废了半天劲。继而谈到了docker的分层镜像。

然后,他说,docker的镜像好大啊。运行起来内存怎么吃得消啊?于是,我只好科普了一下操作系统运行并不会把整个操作系统装入内存的。另外,docker其实并没有运行一个操作系统,而只是做了环境隔离。他觉得我说的不对,和我争了半天。

接下来,他问我,照你这样说,为什么不做一个0-size的完全为空的Docker image,让其看到宿主机的文件系统。我说,不能这么干啊,你不是要隔离吗?让你一个容器里的东西看到宿主机的文件系统,还要读写之,你就不要隔离嘛,设设cgroup就行了。然后,我又和他科普了一下cgroup是什么玩意。

接下来,他说他希望两个docker通信,我说,可以啊,你就想像成两个机器间通讯就好了。他说,不行,应该通过宿主机的文件系统。我说,好吧,但是你不能假设这两个docker容器会在同一台物理机上。他说他就是这个场景,问我docker能不能干,我说能干是能干,但这样不好。于是又和他解释一番为什么集群调度在docker上会更有效。

然后,他问我docker是怎么执行image的,于是我又科普了一下 registry和docker daemon的东西。他说,为什么要registry和dockerfile呢。为什么不直接在base image里直接配置呢?我有点烦了(老实说,我早点有点烦了),我说,你可以是可以,但不要这么做,这就像生产环境一样,你不能在生产线上直接改代码或是环境,因为这样无法跟踪你的变更的。最好的方式,是通过一个可跟踪可维护的构建过程来构建环境。这就是dockerfile的目的。

于是,他说,这问题不就来了?docker那么大的镜像文件,都从服务器上pull下来,那不搞死了?我说,docker的文件系统是分层次的,也就是说,你pull下来的是增量的。而且有第一个人pull下来了,后面的就不用了。

这里他不是很能理解,于是我又回到开头和他再一次科普了一下什么是UnionFS。

这个时候,我实在是受不了了,我说,你要不读读官方的readme吧,如果你英文阅读有问题的话,你可以看看中文社区的文章,虽然非常少,但也能满足你了。

我的耐烦让他有点不爽,于是,他说,他读英文比读中文更通畅,而且有8年的分布式系统的经验。

于是,我说,那再好不过了,那就多读readme吧,当然,先把Unix/Linux的入门知识补充一下,要不要我推荐几本书?另外,最好自己装个Linux/Docker自己玩一下,什么都清楚了。

结果,他来一句——“你要知道,我没时间读书和装个linux玩docker!”

我怒了,我说:“尼玛,你什么逻辑?你没时间,我凭什么就有时间当你的私人家教?你自己不花时间去看书,去学习,特么来消耗别人的时间,还让我加班教你,你多大的人啦?你特么好意思么?

于是,他就这样被我骂走了……

来自:http://weibo.com/p/1001603796313023084296