Docker会给RAM增加里程吗?

时间:2015-09-03 14:41:09

标签: performance docker virtualization ram

According | to | countless | sources,Docker通过跨容器共享系统资源来提供超轻量级虚拟化,而不是为每个容器分配这些资源的副本。

我甚至读过一些文章,据说你可以“在同一个虚拟机上运行数十个甚至数百个容器。

但是如果我的应用程序需要运行2GB内存,并且底层物理机只有8GB内存,我通常只能在其上运行3个应用程序实例(系统内存约为2GB,实用程序,等)。

Docker是否对RAM做了一些魔术,允许我实际运行数十个容器,每个容器分配2GB内存,但不知何故共享未使用的内存?

或者这些陈述是否比其他任何媒体炒作更多?

3 个答案:

答案 0 :(得分:1)

当人们谈论运行"数十个或数百个容器" 时,他们通常会考虑微服务;执行特定任务的小型应用程序。其中每一个都可能以KB而不是MB来衡量内存使用量,而且可能不是GB,因此没有理由让一台体面的机器运行数十或数百台。

实际上有competition(我认为它正在进行中)以在Raspberry Pi上运行尽可能多的容器。结果目前超过一千,但不可否认,这些容器不会运行真实的应用程序。

关于记忆,答案是"它很复杂"。如果您正在使用AUFS或Overlay驱动程序,具有相同基本映像的容器应该能够共享内存页面&#34 ;;意味着共享库不需要为两个容器加载两次。这不是特别的事情;在主机上运行的正常进程将以相同的方式工作。

在一天结束时,容器只是孤立的过程。我们可以轻松地在主机上运行数十个或数百个进程,因此运行数十个或数百个容器并不是不可行。

答案 1 :(得分:0)

Docker容器仅在需要时消耗所需的资源。所以是的,你可以在一个盒子上运行数百台机器,只要它们不是都在积极地消耗你的资源。这就是Docker的独特之处;事实上,容器将使用它可以使用的资源,然后释放它们,使它们可用于同一主机上的另一个容器。最好让容器和Docker处理分配资源,而不是对它们进行硬分配。

答案 2 :(得分:0)

替代方案是虚拟机。您运行的每个虚拟机都必须运行完整的Linux内核,主机操作系统将为虚拟化环境保留一大块内存。这意味着除了最重的硬件外,你真的只能运行几个虚拟机。

容器不运行内核 - 它只运行一个进程(加上子进程)。这意味着如果您在没有容器的情况下运行相同的进程,您可以在容器中运行尽可能多的进程 - 每个进程都认为它在单独的机器上运行,但它们都只是作为主机内核上的进程显示。

没有什么魔法会让你能够使用RAM几十次。但是,您可以将较小的进程打包在一起,比使用虚拟机进行分离更紧凑。