Docker主机上运行的容器数量是否最大?
标题基本上说明了一切:在单个Docker主机上同时运行的容器数量是否有限制?
回答:
您可以遇到(和解决)许多系统限制,但根据
- 您如何配置Docker容器。
- 您正在容器中运行的内容。
- 您所使用的内核,发行版和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 -n
和sysctl fs.file-max
)
Docker选项
- 端口映射
-p
将在主机上为每个端口号运行一个额外的进程(在avg 1.12之前的版本中,每个端口〜4.5MB,每个> 1.12的端口约为〜300ksysctl 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主机上运行的容器数量是否最大? 的全部内容, 来源链接: utcz.com/qa/430862.html