Docker容器的运行时性能成本是多少?

我想全面了解Docker容器的运行时性能成本。我发现关于网络的参考轶事大约慢100µs

我还发现对运行时成本的引用是“可以忽略”和“接近于零”,但我想更准确地知道这些成本是什么。理想情况下,我想知道Docker以性能成本抽象了什么,以及在没有性能成本的情况下抽象了什么。网络、CPU、内存等

此外,如果存在抽象成本,是否有规避抽象成本的方法。例如,也许我可以直接挂载磁盘,而不是虚拟地在Docker中挂载

Felter等人在2014年发表的一篇优秀的IBM研究论文《虚拟机和Linux容器的更新性能比较》中对裸机、KVM和Docker容器进行了比较。总体结果是:Docker几乎与本机性能相同,在每一个类别中都比KVM更快。

例外情况是Docker的NAT — 如果您使用端口映射(例如,docker run-p8080:8080),那么您可以预期延迟会受到轻微影响,如下所示。但是,您现在可以在启动docker容器时使用主机网络堆栈(例如,docker run--net=host),该容器的执行方式与本机列相同(如下面的Redis latency results所示)

他们还对一些特定的服务进行了延迟测试,比如Redis。您可以看到,在20个客户机线程以上,延迟开销最高的是Docker NAT,然后是KVM,然后是Docker主机/本机之间的粗略连接

仅仅因为这是一篇非常有用的论文,这里还有一些其他的数据。请下载以获得完全访问权限

查看磁盘I/O:

现在来看CPU开销:

下面是一些关于记忆的例子(阅读本文了解细节,记忆可能会特别棘手):

发表评论