Docker主机上是否有最大数量的容器运行?

时间:2014-02-15 15:13:34

标签: docker

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

3 个答案:

答案 0 :(得分:32)

您可以遇到许多系统限制(并且可以解决)但是有大量的灰色区域取决于

  1. 如何配置docker容器。
  2. 你在容器中运行的是什么。
  3. 您使用的内核,分发版和泊坞版。
  4. 以下数据来自boot2docker 1.11.1 vm图片,该图片基于Tiny Core Linux 7。内核是4.4.8

    泊坞

    Docker创建或使用许多资源来运行容器,而不是在容器内运行。

    • 将虚拟以太网适配器连接到docker0网桥(每个网桥最多1023个)
    • 安装AUFS和shm文件系统(每个fs类型最多1048576次安装)
    • 在图像顶部创建一个AUFS图层(最多127层)
    • 分叉1个额外docker-containerd-shim管理流程(平均每个容器约3MB,sysctl kernel.pid_max
    • Docker API /守护进程内部数据来管理容器。 (每个容器约400k)
    • 创建内核cgroup并命名空格
    • 打开文件描述符(启动时每个正在运行的容器大约15 + 1。ulimit -nsysctl fs.file-max

    Docker选项

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

    集装箱服务

    总体限制通常取决于你在容器内运行的内容而不是码头工人的开销(除非你做了一些深奥的事情,比如测试你可以运行多少个容器:)

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

    1000个进程中的IO会导致很多IO争用。

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

    如果您从1000个容器创建网络连接,则主机网络层将进行锻炼。

    调整linux主机以运行1000个进程并没有太大的不同,只需要包含一些额外的Docker开销。

    实施例

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

    在主机上运行的1023个普通nc -l -p 80 -e echo host进程使用大约75MB的内核内存和125MB的系统内存

    连续开始1023个容器需要~8分钟。

    连续杀死1023个容器需要约6分钟

答案 1 :(得分:13)

从邮件列表上的帖子中,大约有1000个容器,您开始遇到Linux网络问题。

原因是:

  

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

答案 2 :(得分:0)

使用 Docker-compose,我能够在单个主机(具有 190GB 内存)上运行超过 6k 个容器。容器镜像小于 10MB。但是由于桥接限制,我将容器分批分成多个服务,每个服务有 1k 个容器和单独的子网。

docker-compose -f docker-compose.yml up --scale servicename=1000 -d

但是在达到 6k 后,即使内存在 60GB 左右仍然可用,它也会停止扩展并突然增加内存。应该有 docker 团队发布的基准数据来提供帮助,但不幸的是它不可用。另一方面,Kubernetes 发布了关于每个节点推荐的 Pod 数量的基准统计数据。