在Docker主机上运行容器的最大数量是多less?

基本上,标题说明了一切:单个Docker主机上同时运行的容器数量是否有限制?

有许多系统限制可以运行(并且变通),但是有很大的灰色区域取决于

  1. 你如何configuration你的docker集装箱。
  2. 你在容器中运行什么。
  3. 什么内核,分发和docker版本你在。

下图是基于Tiny Core Linux 7的boot2docker 1.11.1 vm镜像。 内核是4.4.8

docker

Docker创build或使用一些资源来运行一个容器,而不是在容器内部运行。

  • 将虚拟以太网适配器连接到docker0网桥(每个网桥最多1023个)
  • 装载一个AUFS和shm文件系统(1048576最大每个fstypes)
  • 在图像上方创build一个AUFS图层(最多127层)
  • 叉一个额外的docker-containerd-shimpipe理过程(在avg和sysctl kernel.pid_max上,每个容器sysctl kernel.pid_max
  • Docker API /守护进程内部数据来pipe理容器。 (每个容器〜400k)
  • 创build内核cgroup和名称空间
  • 打开文件描述符(启动时每个正在运行的容器大约15 + 1个ulimit -nsysctl fs.file-max

Docker选项

  • 端口映射-p会在主机上为每个端口号运行一个额外的进程(平均每个端口约4.5MB,平均1.12,每个端口约300k> 1.12以及sysctl kernel.pid_max
  • --net=none--net=host将消除networking开销。

集装箱服务

总的限制通常取决于你在容器内运行的内容,而不是docker工人的开销(除非你正在做一些深奥的事情,比如testing你可以运行多less个容器:)

如果你在虚拟机(node,ruby,python,java)中运行应用程序,内存使用可能会成为你的主要问题。

跨越1000个进程的IO将导致大量的IO争用。

1000个进程试图同时运行会导致大量的上下文切换(请参阅上面的vm应用程序进行垃圾回收)

如果您从1000个容器创buildnetworking连接,则主机networking层将获得锻炼。

调整一个linux主机运行1000个进程没有什么不同,只是需要额外的Docker开销。

1023运行nc -l -p 80 -e echo host Docker busybox映像使用了大约1GB的内核内存和3.5GB的系统内存。

1023 plain nc -l -p 80 -e echo host运行的nc -l -p 80 -e echo host进程使用大约75MB的内核内存和125MB的系统内存

连续启动1023个集装箱需要8分钟左右的时间。

连续杀死1023个集装箱约需6分钟

实际的限制是系统允许的PID数量,可以在/proc/sys/kernel/pid_max 。 单个容器的开销非常低。 根据系统资源,理论上可以在单个主机上运行数千个容器。

从邮件列表中的一篇文章中,大约有1000个容器开始遇到Linuxnetworking问题。

原因是:

这是内核,特别是net / bridge / br_private.h BR_PORT_BITS由于生成树的要求而不能被扩展。