【发布时间】:2020-02-06 09:42:38
【问题描述】:
我想在我的一台 linux 电脑上部署 100 个容器。
如果不使用 docker,那 100 个服务的内存是可以的。
但如果使用 docker,我会看到下一个:
25504 0.0 0.0 10796 5060 ? Sl 12:41 0:00 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/779ab7bff4bed93d2912437e58e9b830c2f72ef2d8f3b4a5ba31e6d0db8e72b2 -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
这意味着对于一个容器,containerd-shim 将花费5M 内存,更糟糕的是:对于每个新容器,都会有一个containerd-shim 进程。这意味着对于 100 个容器,将有额外的 5M * 100 = 500M 内存消耗。
超出预期吗?我有机会尝试减少500M吗?
【问题讨论】:
-
您是否已经尝试限制容器资源? docs.docker.com/v17.09/engine/admin/resource_constraints/…
-
@LinPy 我不是说 docker 容器本身使用的资源,我是说下一个:
dockerd -> containerd -> containerd-shim (runc) -> PID1。如你所知,dockerd & containerd只有一个实例,但containerd-shim将控制runc启动container,每个容器都会有一个containerd-shim,这可以使容器在dockerd 崩溃时也能存活。作为PID1的父进程,占用内存太大。我曾经听说,我们可以不使用containerd-shim,只需使用containerd启动runc,但不确定,所以这里有这个问题。 -
@LinPy 很遗憾
medium.com在我的网络环境中被屏蔽了,能否请您把它作为答案,让我学习一下?
标签: docker