当前位置: 首页 > 面试题库 >

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

陶法
2023-03-14
问题内容

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


问题答案:

您可以遇到(和解决)许多系统限制,但根据

  1. 您如何配置Docker容器。
  2. 您正在容器中运行的内容。
  3. 您所使用的内核,发行版和Docker版本。

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

码头工人

在您在容器内部运行的基础之上,Docker会创建或使用大量资源来运行容器。

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

Docker选项

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

集装箱服务

通常,总体限制取决于您在容器中运行的内容,而不是由dockers开销决定(除非您做的事情比较深奥,例如测试可以运行的容器数量:)

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

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

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

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

调整Linux主机以运行1000个进程并没有太大不同,仅包括一些额外的Docker开销。

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

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

依次启动1023个容器大约需要8分钟。

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



 类似资料:
  • 问题内容: 如何从Docker容器控制主机? 例如,如何执行复制到主机的bash脚本? 问题答案: 那真的取决于您需要该bash脚本执行的操作! 例如,如果bash脚本仅回显某些输出,则可以执行 另一种可能性是您希望bash脚本安装某些软件-例如要安装docker-compose的脚本。你可以做类似的事情 但是,此时,您真的必须深入了解脚本在做什么,以允许容器从容器内部对其主机授予特定权限。

  • 如何从docker容器控制主机? 例如,如何执行复制到主机的bash脚本?

  • 我想使用Docker,以便能够运行一个需要PHP5.3的旧应用程序,同时在我的主机服务器上还有我的其他网站,在主机Apache上运行。 所以我有一个网站。com,siteB。com,siteC。com运行在主机上,使用主机Apache/PHP/MySQL服务器,我有siteZ。com,安装在Docker容器中,该容器应使用容器的Apache/PHP,而不是主机MySQL服务器。 这是我想获得的架构

  • 问题内容: 我可以在主机上运行docker命令吗?我安装在Docker容器中,现在可以以某种方式在主机上使用命令(在后台使用Docker容器的aws)吗? 我的情况是这样的:我在生产主机上有数据库备份。现在我有Jenkins cron作业,它将从db容器中获取sql文件,并将其放入服务器文件夹中。现在我还希望jenkins将此备份文件上传到AWS存储上,但是在主机上我没有安装aws,也不想在主机上

  • 机器A和B之间的通信工作良好。我可以运行像或这样的命令,它会给出预期的结果: 我听说过,但还没有尝试过,但据我所知,这并不能解决我的问题。 有什么方法可以直接使用来实现这一点。解决办法可能是使用连接到远程主机,并直接从远程主机使用客户机,但我希望尽可能避免这种解决方案。 在上运行,而不是在本地计算机上运行。

  • 澄清: 我有一台安装了Docker的macbook 我有一个带有MySQL的docker容器 我想从MacBook上的终端连接到在上述容器上运行的mysql实例 我不想使用命令来实现此操作。相反,我想直接从终端使用客户机(而不通过docker容器隧道进入)。 我没有在本地运行MySQL,所以端口3306应该是打开的,可以随时使用。 我用来启动容器的命令是: