[OT]docker是不是虚拟机的末日?

72 views
Skip to first unread message

包乾

unread,
Nov 25, 2015, 7:12:14 AM11/25/15
to sh...@googlegroups.com
各位好!
前些天稍有空余时间上手了一下最近炙手可热的docker,用完我不禁大吃一惊:这岂不是彻底颠覆了(特别是对开发者来说)旧有的虚拟机,甚至是gentoo
prefix都在等死之列!?从前为了编译一套计算library费九牛二虎之力搞了不好最后还得放弃投奔vbox,可是现在这一切都变成了轻轻的一点,而且performance和local运行的差距如此之小!

由于我只是在业余使用linux并且做过一些数值计算,并不是职业的程序员所以想问问业内人士的大家,docker到底有多颠覆?为什么这么一个换瓶不换酒的技术早些没有人推广成功呢?

谢谢!

Jerry Ling

unread,
Nov 25, 2015, 7:37:19 AM11/25/15
to sh...@googlegroups.com
不然为何搞docker(滑稽



Sent from myMail for iOS


Wednesday, November 25, 2015, 20:12 +0800 from houke...@gmail.com <houke...@gmail.com>:
--
-- You received this message because you are subscribed to the Google Groups Shanghai Linux User Group group. To post to this group, send email to sh...@googlegroups.com. To unsubscribe from this group, send email to shlug+un...@googlegroups.com. For more options, visit this group at https://groups.google.com/d/forum/shlug?hl=zh-CN
---
您收到此邮件是因为您订阅了 Google 网上论坛的“Shanghai Linux User Group”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到shlug+un...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/d/optout。

依云

unread,
Nov 25, 2015, 7:55:38 AM11/25/15
to sh...@googlegroups.com
首先我想说一点:docker 不是传统意义上的虚拟机——它通常不跑 init 程序。它
是隔离得更加完善的 chroot。你可以当它是个还不太完善的 BSD jail 替代。

vbox 的虚拟层次和 docker 工作的层次也是不一样:使用 docker,你只能在
linux 上跑 linux。

> 而且performance和local运行的差距如此之小!

你真的不是在黑 docker 么 233

同样使用 cgroup、namespace 等技术的实现,lxc 和 systemd-nspawn 完全可以
做到和其外环境的程序运行效率相差无几:你觉得 chroot 内外的效率差会有多大?
而 docker,它的 I/O 不管是用 aufs 还是 overlayfs 还是 dm-thinp 还是
btrfs,都有性能损耗的。

最重要的是,docker 的设计目标不是虚拟机啊!你在里边做的任何修改都是不会
被自动保存的——它是部署工具。你当然不希望你的服务上线之后,因为运行环境变
来变去最后出现莫名其妙的问题,所以 docker(部分地)把运行环境给冻结了。
程序写好之后,打个 docker 包,就可以给别人直接用了,不会有太多环境的问题。

但是我不理解 docker 为什么不把这部分文件系统挂载成只读,这样子就不会意外
丢失数据了(比如程序不小心把东西写错了地方)。

为什么早些没有推广?因为早些还没 cgroup 那些 docker 所依赖的内核特性呀。

也有类似的工具,比如纳米比特,使用的是 vbox,性能上就没有那么好了。

--
Best regards,
lilydjwg

Linux Vim Python 我的博客:
http://lilydjwg.is-programmer.com/
--
A: Because it obfuscates the reading.
Q: Why is top posting so bad?

Shell Xu

unread,
Nov 25, 2015, 10:46:38 AM11/25/15
to shlug
关于docker的技术细节就不说了,那会是一篇很长的文章。

从模式上说,docker不是虚拟机,用docker也注定做不了IaaS。我们不说复杂,就说CPU控制吧。你有注意过docker的CPU控制么?那不是控制你用多少个核,而是控制你用哪些核。这不是CPU限制,而是亲缘性绑定。

同类的问题还有很多。docker的隔离,仅限于虚拟机内的程序并不是那么恶意的情况。这像是一个公司内的程序多过多个公司的程序。这也是为什么docker被设计为部署系统而不是虚拟机的缘故。

而且如上所说。aufs,veth,都有相当的性能损耗。你测不出是因为你没测试过。

问题的关键是部署系统。

如果将docker视为部署系统的内核和抽象层,那么我同意,每个公司应该都有一套类似的系统,快速部署,快速扩展,方便使用。而且多个程序可以混合的部署在多台机器上,充分利用系统的闲置资源。但是有个问题——docker是不能跑在docker内的。docker依赖的cgroup,其设计还没有实现分层。如果你将cgroupfs挂到了guest里,那么guest就可以调整自己的优先级。而如果不挂载进去,guest就无法执行docker。

所以,作为一家公司,如果我想运行一套基于docker的集群系统,例如docker+kubernetes,那么我应该选择什么基础环境呢?

肯定不是基于docker的云,因为基于docker的云跑不动。基本只有两个选择,物理机或虚拟机IaaS。

当然,其实我们还有一个选择。让docker云的运营商作为PaaS,提供代码编译为image最后自动部署执行的所有能力。当然,这么做有这么做的问题。限于篇幅我就不展开了。

--
-- You received this message because you are subscribed to the Google Groups Shanghai Linux User Group group. To post to this group, send email to sh...@googlegroups.com. To unsubscribe from this group, send email to shlug+un...@googlegroups.com. For more options, visit this group at https://groups.google.com/d/forum/shlug?hl=zh-CN
---
您收到此邮件是因为您订阅了 Google 网上论坛的“Shanghai Linux User Group”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到shlug+un...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/d/optout



--
彼節者有間,而刀刃者無厚;以無厚入有間,恢恢乎其於游刃必有餘地矣。
blog: http://shell909090.org/blog/

孑影

unread,
Nov 25, 2015, 9:28:58 PM11/25/15
to sh...@googlegroups.com

docker是不是虚拟机的末日

就目前来说,非常明确的答案是:不是。

君不见很多虚拟机厂商都在提供 vm + docker的方案了吗 ?

因此当下可以把docker理解成一种很好很好用的Linux部署工具吧。


#风起看云涌,叶落品人生#

您收到此邮件是因为您订阅了Google网上论坛上的“Shanghai Linux User Group”群组。

yi lu

unread,
Nov 25, 2015, 10:47:56 PM11/25/15
to sh...@googlegroups.com
那么,docker能通过改进,取代虚拟机吗?

DaboD

unread,
Nov 25, 2015, 10:48:58 PM11/25/15
to Shanghai Linux User Group
標題如果改成 "Container 是不是虛擬機末日" 會更適合些.

Container 中的程序, 能做什麼, 在產生時就被確定下來了 (capabilities 被去掉了, priority 被限制了, syscall 被過濾了, RAM/SWAP/IO/HUGEPAGE 被限額了, device node 沒有建立...), 因此裡面的應用其實會有不少的限制, 沒法像 vm 那麼自由.

vm 天生的隔離性就遠大於 container, 後者要做到更好的隔離, 還需要非常多 Linux kernel 中的改動, 問題是, 有些資源的隔離造成的性能下降 & 代碼複雜度的增加, 是否值得? 另外代碼一但複雜, 要確認它的安全性難度就跟著提高...

DaboD

unread,
Nov 25, 2015, 10:59:20 PM11/25/15
to Shanghai Linux User Group
弱弱的問下, 為啥配合 btrfs 性能會有損耗?

Shell Xu

unread,
Nov 25, 2015, 10:59:31 PM11/25/15
to shlug
如果一个东西,叫起来像鸭子,走起来像鸭子,那他就是鸭子。最多也就是个头大一点的鸭子。

Shell Xu

unread,
Nov 25, 2015, 11:25:16 PM11/25/15
to shlug
只要你要实现COW的话。。。

--
-- You received this message because you are subscribed to the Google Groups Shanghai Linux User Group group. To post to this group, send email to sh...@googlegroups.com. To unsubscribe from this group, send email to shlug+un...@googlegroups.com. For more options, visit this group at https://groups.google.com/d/forum/shlug?hl=zh-CN
---
您收到此邮件是因为您订阅了Google网上论坛上的“Shanghai Linux User Group”群组。

要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到shlug+un...@googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout

DaboD

unread,
Nov 25, 2015, 11:38:15 PM11/25/15
to Shanghai Linux User Group
瞭解~ 我還以為指的是配合 docker 造成的.
只要你要实现COW的话。。。


要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到shlug+unsubscribe@googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout

DaboD

unread,
Nov 25, 2015, 11:49:22 PM11/25/15
to Shanghai Linux User Group
BSD Jail (沒碰過) 好像也不是相當完善的實現 (我原以為它很成熟了), 這篇介紹滿有意思的


On Wednesday, November 25, 2015 at 8:55:38 PM UTC+8, 依云 wrote:

Shell Xu

unread,
Nov 26, 2015, 1:42:44 AM11/26/15
to shlug
任何一种监狱都有越狱。虚拟机这种的,都有点“缸中大脑”味道的玩意,也不是万无一失的。

--
-- You received this message because you are subscribed to the Google Groups Shanghai Linux User Group group. To post to this group, send email to sh...@googlegroups.com. To unsubscribe from this group, send email to shlug+un...@googlegroups.com. For more options, visit this group at https://groups.google.com/d/forum/shlug?hl=zh-CN
---
您收到此邮件是因为您订阅了Google网上论坛上的“Shanghai Linux User Group”群组。

要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到shlug+un...@googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout

依云

unread,
Nov 26, 2015, 11:49:06 AM11/26/15
to sh...@googlegroups.com
On Wed, Nov 25, 2015 at 07:59:20PM -0800, DaboD wrote:
> 弱弱的問下, 為啥配合 btrfs 性能會有損耗?

btrfs 对大文件随机写的性能很差,因为 CoW。当然你也可以费心地把它们全部都
标记成不要 CoW。

上次我看的时候,docker 官方是不建议在生产环境中使用 btrfs 的,估计是因为
btrfs 在生产环境中用得还是太少。

依云

unread,
Nov 26, 2015, 12:01:35 PM11/26/15
to sh...@googlegroups.com
On Wed, Nov 25, 2015 at 08:49:21PM -0800, DaboD wrote:
> BSD Jail (沒碰過) 好像也不是相當完善的實現 (我原以為它很成熟了), 這篇介紹滿有意思的
> https://aboutthebsds.wordpress.com/2013/01/13/freebsd-jails-are-a-huge-security-danger/

这个博客挺有意思的,专门黑 BSD 啊。

包乾

unread,
Nov 27, 2015, 8:41:49 AM11/27/15
to sh...@googlegroups.com
感谢大家的讨论,学习了。

可是我还是有一个疑问,gentoo prefix呢?gentoo prefix岂不是整个和docker重合了?是不是gentoo
prefix就这样彻底失去意义了?
> --
> -- You received this message because you are subscribed to the Google Groups Shanghai Linux User Group group. To post to this group, send email to sh...@googlegroups.com. To unsubscribe from this group, send email to shlug+un...@googlegroups.com. For more options, visit this group at https://groups.google.com/d/forum/shlug?hl=zh-CN
> ---
> 您收到此邮件是因为您订阅了 Google 网上论坛的“Shanghai Linux User Group”群组。

80x24

unread,
Nov 27, 2015, 9:08:10 AM11/27/15
to sh...@googlegroups.com
包乾 wrote:
> 感谢大家的讨论,学习了。
>
> 可是我还是有一个疑问,gentoo prefix呢?gentoo prefix岂不是整个和docker重合了?是不是gentoo
> prefix就这样彻底失去意义了?

不啊,这个不影响,不知道为什么你会有这样的看法。

> To bring out the virtues of Gentoo Linux on different operating
> systems, the Gentoo Prefix project develops and maintains a way of
> installing Gentoo systems in a non-standard location, designated by a
> "prefix".

Gentoo Prefix[1]的项目说明也解释了只是将Gentoo带到其他操作系统上。(很遗
憾Windows现在不行...)

其他操作系统想要用上Docker,现在首先得装一个完整的虚拟机软件,里面跑一个
Linux Guest,才能使用Docker...

Container以后会更加广泛,甚至还能看到这样的卫星呢[2],也就是说以后可能会
在流行的操作系统上能跑各种系统的Container标准。(天知道这卫星放到哪里去了)

而Docker,是基于LXC的一种流行的包装,它也许已经比单纯的平台化解决方案已
经影响力更大了,但并不表示会比Container高到哪里去。

把Docker看成一种快速有效的部署方式就好了,针对“轻便”,“性能损失少”等等,
某个人用的最多的还是chroot,想用起来更像一个完整的系统,那么就LXC。

[1]: https://wiki.gentoo.org/wiki/Project:Prefix
[2]: https://www.opencontainers.org/

Shell Xu

unread,
Nov 27, 2015, 11:21:06 AM11/27/15
to shlug
其实对于想做部署的公司,用su+aufs+chroot就结了。namespace和cgroup给他们用都是浪费。对于想拿docker做PaaS或者IaaS的公司而言,则是恰恰相反。

--
-- You received this message because you are subscribed to the Google Groups Shanghai Linux User Group group. To post to this group, send email to sh...@googlegroups.com. To unsubscribe from this group, send email to shlug+un...@googlegroups.com. For more options, visit this group at https://groups.google.com/d/forum/shlug?hl=zh-CN
--- 您收到此邮件是因为您订阅了 Google 网上论坛的“Shanghai Linux User Group”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到shlug+un...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/d/optout

依云

unread,
Nov 28, 2015, 9:41:53 AM11/28/15
to sh...@googlegroups.com
On Fri, Nov 27, 2015 at 10:07:01PM +0800, 80x24 wrote:
> [...]
>
> 而Docker,是基于LXC的一种流行的包装,它也许已经比单纯的平台化解决方案已
> 经影响力更大了,但并不表示会比Container高到哪里去。

docker 不是基于 lxc 的。docker、lxc、systemd-nspawn 都是基于 container
技术的实现。

> 把Docker看成一种快速有效的部署方式就好了,针对“轻便”,“性能损失少”等等,
> 某个人用的最多的还是chroot,想用起来更像一个完整的系统,那么就LXC。

我看 systemd-nspawn 也挺不错的样子呢,至少不需要写配置文件了,就是不知道
它的设备的隔离是怎么做的。

80x24

unread,
Nov 28, 2015, 9:47:59 AM11/28/15
to sh...@googlegroups.com
依云 wrote:
> On Fri, Nov 27, 2015 at 10:07:01PM +0800, 80x24 wrote:
>> [...]
>>
>> 而Docker,是基于LXC的一种流行的包装,它也许已经比单纯的平台化解决方案已
>> 经影响力更大了,但并不表示会比Container高到哪里去。
>
> docker 不是基于 lxc 的。docker、lxc、systemd-nspawn 都是基于 container
> 技术的实现。
>
>> 把Docker看成一种快速有效的部署方式就好了,针对“轻便”,“性能损失少”等等,
>> 某个人用的最多的还是chroot,想用起来更像一个完整的系统,那么就LXC。
>
> 我看 systemd-nspawn 也挺不错的样子呢,至少不需要写配置文件了,就是不知道
> 它的设备的隔离是怎么做的。
>

似乎从0.9开始不再基于LXC[1],而是直接使用libcontainer了[2],这点倒是真没
注意。

systemd-nspawn似乎需要使用systemd?

[1]: http://www.infoq.com/news/2014/03/docker_0_9
[2]:
http://blog.docker.com/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer/

依云

unread,
Nov 29, 2015, 12:40:17 AM11/29/15
to sh...@googlegroups.com
On Sat, Nov 28, 2015 at 10:47:24PM +0800, 80x24 wrote:
>
> 似乎从0.9开始不再基于LXC[1],而是直接使用libcontainer了[2],这点倒是真没
> 注意。
>
> systemd-nspawn似乎需要使用systemd?

原来 docker 早些时候是基于 lxc 的呀。

我没看到 systemd-nspawn 是否需要 systemd 的说明。ldd 显示它没有链接到
systemd 或者 dbus 的库。我好像也没有非 systemd 的系统来测试呢……

memorybox

unread,
Nov 29, 2015, 8:17:24 AM11/29/15
to sh...@googlegroups.com
docker是个很用的工具,至少在我的玩具项目里,我已经用docker替代virtualenv之类的工具管理环境了。

但是docker的使用场景其实又很局限,如果你想把它看成虚拟机的替代,它的限制太多了,比如网络,比如安全,比如一些系统方面的操作。

如果你只想用它跑服务,OK,自用是很好的。但是要想把它包装成为Paas的平台,我觉得会有很多问题。

我能想到的,就是未来docker或者容器技术,会在测试、部署方面成为jenkins那种级别的工具,但想要成为平台的话,可能性不大。



tib

unread,
Dec 3, 2015, 2:47:44 AM12/3/15
to sh...@googlegroups.com
最近也在研究docker.

我感觉docker的网络似乎还不太成熟。

bridge: docker0 这个好像只有一个nat,并不是真正意义上的桥接(对比vmware vbox等)

host: 直接使用主机的port资源

network: 这个貌似不错,可以使用overlay network,可以自定义网络插件。使用这个已经成功可以在>2的主机上实现container内IP的互ping,但是貌似没法把这个IP给暴露至局域网。

想请教一下,大家有什么好的方法可以使用overlay network的同时,可以让局域网的访问到container 的 IP:PORT

PS: 我自己想到的是 一个container attach到两个网络,一个overlay,一个docker0 ,然后docker0这个nat端口port出来。(前提是:container service得listen 0.0.0.0)

您收到此邮件是因为您订阅了Google网上论坛上的“Shanghai Linux User Group”群组。

要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到shlug+un...@googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout



--
人生就像蜡烛一样,从顶燃到底,都应该是光明的。

memorybox

unread,
Dec 3, 2015, 9:07:35 PM12/3/15
to sh...@googlegroups.com
在docker1.9之前,联网似乎很有局限。

想要不用docker的NAT,容器获取独立IP,直接和局域网通信,有三种办法:

1.建立自己的网桥和veth pair,为每个网桥分配一个IP,每个veth对绑定一个网桥,映射进docker容器,这样在容器内就得到了一个接近于真实的网卡。并且能与本地网络通信
2.使用Open vSwitch Bridge,模拟上面这种办法
3. 建立macvlan虚拟网卡,容器启动后用nsenter工具映射到容器的network namespace中,然后再容器中为这个macvlan网卡设置ip和路由

不论哪一种办法,都会把容器暴露在外,安全性很成问题,但是挡不住大家需求啊,我就是想把docker当虚拟机用,所以早期有各种搞法,比如pipework之类的shell脚本,就是做这种事情的,还有baseimage-docker,也是想把docker容器包装的像一个虚拟机一样。

我还写过一个工具,广告一下,dockerfly:

就是采用方法3,通过精致的定制容器,把container 尽量搞得像一台vps。

docker1.9的网络貌似有了新的增强,但是暂时没有精力研究。

其实我觉得,docker想要做平台,做来做去,可能后期又会把openstack的网络又实现一遍了,比如早期docker的网络,就是openstack nova早期的搞法,现在搞着搞着,发现需要实现一个完整的SDN网络了....

我以前写过一篇blog,理解过这个事情,有兴趣的话可以翻一翻:




memorybox

unread,
Dec 3, 2015, 9:07:52 PM12/3/15
to sh...@googlegroups.com
然后关于它的作用和使用场景,前面shell已经说的非常明白了,双手双脚同意。

1、如果我的场景是快速部署,统一开发和测试环境,集成测试等等,用docker很方便。

2、如果我自己做个项目,想要干净一点的环境隔离,不在意安全性,那就把容器暴露出去,分个局域网IP,启动sshd服务,当成虚拟机来用,似乎也没有多大问题。

3、如果我想用它在物理机上划分虚机,支撑公司其它业务,而其他人的需求各种各样,比如装windows,比如linux各种root操作,那有钱还是要vsphere,没钱的话请一位openstack专家来为你规划吧。docker不是做这个的。

问题是现在越来越的的人想要用docker实现场景3,甚至docker本身都要往平台化这个方向走,我有点摸不到头脑了。

所以我觉得现阶段,docker是像jenkins那种级别的工具,用作开发、测试环境、统一部署那是利器,想要平台化真的是坑。

Shell Xu

unread,
Dec 3, 2015, 9:52:01 PM12/3/15
to shlug
你想把docker当虚拟机用,可以直接用lxc。docker的目地就是不只是虚拟机。。。

memorybox

unread,
Dec 3, 2015, 10:36:12 PM12/3/15
to sh...@googlegroups.com
Yes,但是我还想要docker的镜像构建功能,来进行每日构建。

所以docker 成功就在对不同技术的包装,成功抽象出来一个具体产品。

Shell Xu

unread,
Dec 3, 2015, 10:45:15 PM12/3/15
to shlug
不,这明显不是虚拟机需求。虚拟机期望本地存储的数据稳定(至少能在某些区域稳定)。如果你每天构建一遍,就会每天堆积一个新的虚拟机镜像出来。。。这明显是docker的活,而不是虚拟机的。

tib

unread,
Dec 4, 2015, 3:11:22 AM12/4/15
to sh...@googlegroups.com
@ memorybox , 多谢提供的方法,有机会试一下。

我的主要需求是,想要在docker里面实现redis 3.0 cluster。制作好image后,发现无法创建集群,貌似是一个redis的bug,在nat环境下,没有实现透明的IP:PORT,redis实例自己会去发现一个IP,而不是只使用我指定的IP:PORT

这个在sentinel + master + slave实验过程中也是不行。

不知道有没有成功的同学?

tib

unread,
Dec 4, 2015, 3:13:18 AM12/4/15
to sh...@googlegroups.com
对了,这个在单机上是没有问题的。

大于2个的就不好玩了。所以就是我前面提到的网络问题。
--
人生就像蜡烛一样,从顶燃到底,都应该是光明的。

Derek Dai

unread,
Dec 4, 2015, 3:19:19 AM12/4/15
to sh...@googlegroups.com
先說好, 我沒用過 redis.

前兩天參加 CF Summit 2015 上認識 Dave, 他說他們公司目前是 redis 項目 donate 的第一名 (我只是放上他的原話), 對 redis 有商業支持, 跟開源的主要差異就在 cluter 的支持. 有需要可以跟他接觸下

Dave Nielsen <da...@redislabs.com>

Derek Dai

您收到此邮件是因为您订阅了Google网上论坛上“Shanghai Linux User Group”群组中的主题。
要退订此主题,请访问https://groups.google.com/d/topic/shlug/qgNMX6xWZiI/unsubscribe
要退订此群组及其所有主题,请发送电子邮件到shlug+un...@googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout

Conner Mo

unread,
Dec 17, 2015, 5:09:35 AM12/17/15
to sh...@googlegroups.com
Docker本意是做应用平台,结果因为Dockerfile写起来太累,所以到了一般人手里就都用来做虚拟机了。。。。泪奔了有没有。
Best Regards, 
Conner Mo

Jian Wen

unread,
Dec 17, 2015, 10:44:29 AM12/17/15
to sh...@googlegroups.com
还美名曰胖容器。Docker太火,以至于看到问题就想到它。
今年在这上面踩了个小坑。感慨两句
Best,

Jian
Reply all
Reply to author
Forward
0 new messages