Docker容器上限思考

栏目: 编程工具 · 发布时间: 7年前

内容简介:在研究根据有意思的是代码的最后一行,当容器名为

在研究 Helm 时发现其创建的随机容器名跟 docker 类似都是左右形式的组合,因此想到Docker随机容器名的上限是多少,会不会因为随机容器名的重复而导致无法再创建随机容器名的容器实例而达到容器的上限。

二、随机容器名生成

根据 my2centsHow does Docker generate default container names? 文章介绍,得知docker随机容器名的生成是分为左右值的,即拥有两个独立的数组。查看docker容器名生成的 源代码 可以看到左值都是一些形容词,共计100个,右值都是一些 amazing man ,并且给出了wiki百科的介绍页面,共计235位。(统计截止到2019年3月7日)

有意思的是代码的最后一行,当容器名为 boring_wozniak 时会重新生成, Steve Wozniak 是Apple I和Apple II的发明人,看来码代码的人是分推崇Wozniak,加了专门的彩蛋。

if name == "boring_wozniak" /* Steve Wozniak is not boring */ {
  goto begin
}

根据容器名规则以及容器名实例不能重复原则使用排列组合可以得知能够创建的随机容器名实例上限是100*235-1=23499个。

这种容器名生成的优势是什么?

通过使用 形容词-单词 的组合方式生成的容器名比枯燥的hash数字更为好看也便于记忆。

三、容器上限

问题来了,在单一主机中到底能够运行多少个容器?

根据 stack overflow 上的 Is there a maximum number of containers running on a Docker host? 回答,翻译如下[1]

docker容器创建实例有很多的系统限制,一些重要的信息如下:

  • 容器的配置
  • 容器里运行的程序
  • 系统的内核版本、发行版本、docker版本

详细的运行限制如下:

  • 链接到虚拟网络适配器docker0网桥的设备限制:(每个网桥最多1023)
  • 挂载联合文件系统(AUFS)和shm文件系统:(最大挂载数量1048576)
  • 在镜像image上创建的层数layer数量:(最多127layer每个镜像)
  • fork出来一个docker-containerd-shim的管理进程:(每个容器平均3M左右,系统最大进程数sysctl kernel.pid_max)
  • docker daemon守候进程管理容器的内部数据:(~400k 每个容器)
  • 创建内核的 cgroupsnamespace
  • 打开文件描述符:(启动中的容器16个左右) ulimit -n and sysctl fs.file-max
  • 端口映射,-p将会在宿主机上为每一个映射的端口启动一个外部进程:(平均每个端口占用~4.5MB)
  • –net=none 和 –net=host参数将有助于减少网络消耗。

Container 服务

总的资源消耗取决于你容器内运行的程序,而不是docker本身,如果你在虚拟机中运行应用程序node,ruby,python,java,内存的消耗将是主要问题。

1000个进程会消耗大大量的IO 链接。1000个进程同时运行也会引起大量的上下文交换,

1023 Docker busybox images

nc -l -p 80 -e echo

共计使用约1G的内核空间和3.5G的系统内存

1023 普通进程

nc -l -p 80 -e echo

将会消耗约75MB的内核空间和125MB的系统内存

此外,

连续启动1023个容器预计耗费约8分钟,关闭1023个容器预计耗费约6分钟

实验

有文章做了一个实验来启动500个容器,感兴趣的可以查看 docker 启动500个容器测试

结论

根据以上信息可以得知随机容器名的限制不会是容器创建上限的障碍,容器实例本身所消耗的资源如内存、网络等才是最关键的影响。

【参考链接】

1) Is there a maximum number of containers running on a Docker host?

2) docker 最大container数量调研


以上所述就是小编给大家介绍的《Docker容器上限思考》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

统计思维

统计思维

[美] Allen B. Downey / 金迎 / 人民邮电出版社 / 2015-9 / 49.00元

现实工作中,人们常常需要用数据说话。可是,数据自己不会说话,需要人对它进行分析和挖掘才能找到有价值的信息。概率统计是数据分析的通用语言,是大数据时代预测未来的根基。如果你有编程背景,就能以概率和统计学为工具,将数据转化为有用的信息和知识,让数据说话。本书介绍了如何借助计算而非数学方法,使用Python语言对数据进行统计分析。 通过书中有趣的案例,你可以学到探索性数据分析的整个过程,从数据收集......一起来看看 《统计思维》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换