【问题标题】:Resource Usage by stopped Docker containers停止的 Docker 容器的资源使用情况
【发布时间】:2015-03-04 03:45:46
【问题描述】:

Docker 可以轻松停止和重新启动容器。它还具有暂停然后取消暂停容器的能力。 Docker 文档状态

当容器退出时,文件系统的状态和它的退出值被保留。您可以启动、停止和重新启动容器。进程从头开始(它们的内存状态不保存在容器中),但文件系统与容器停止时一样。

我通过设置一个运行 memcached 的容器来测试这一点,然后将一个值写入 memcache,然后

  • 停止并重新启动容器 - 内存缓存值消失了
  • 暂停然后取消暂停容器 - memcached 值仍然完好无损

在文档的某个地方 - 我再也找不到准确的文档 - 我读到停止的容器不会消耗 CPU 或内存。然而:

  • 我想保留文件系统状态这一事实意味着容器仍然会占用主机文件系统上的一些空间?
  • 系统中有 10 秒甚至 100 秒的停止容器是否会影响性能(主机磁盘空间消耗除外)?例如,Docker 是否更难启动和管理新容器?
  • 最后,如果 Paused 容器在 Unpaused 时保持其内存状态 - 正如它们记住 memcached 键的能力所证明的那样 - 它们对 CPU 和内存有不同的影响吗?

我非常感谢任何能够澄清这些问题的人。

【问题讨论】:

  • 好问题,我也想知道。 Docker 使用 cgroups freezer,因此如果您愿意花时间了解它们,那里的文档应该会有所帮助。

标签: docker lxc


【解决方案1】:

我不是 docker core 方面的专家,但我会尝试回答其中的一些问题。

  1. 我想保留文件系统状态的事实意味着容器仍然会占用主机文件上的一些空间 系统?

是的。 Docker 将所有容器和镜像数据保存在/var/lib/docker 中。保存容器和图像数据的默认方式是使用 aufs。每一层的数据都保存在/var/lib/docker/aufs/diff下。创建新容器时,还会使用 is 文件夹创建一个新层,并将源图像层的更改存储在该文件夹中。

  1. 是否存在与停止 10 秒甚至 100 秒相关的性能损失(主机磁盘空间消耗除外) 系统中的容器?例如,它是否让它变得更难 Docker 来启动和管理新容器?

据我所知,它不应该受到任何性能影响。当您停止一个容器时,docker daemon 会向该容器的所有进程发送 SIGTERM 和 SIGKILL,如 docker CLI documentation 中所述:

用法:docker stop [OPTIONS] CONTAINER [CONTAINER...]

通过发送 SIGTERM 和 SIGKILL 来停止正在运行的容器 宽限期

-t, --time=10 容器等待的秒数 在杀死它之前停止。默认为 10 秒。


3.最后,如果 Paused 容器在 未暂停 - 正如他们记住 memcached 的能力所证明的那样 键 - 它们对 CPU 和内存有不同的影响吗?

正如@Usman 所说,docker 使用 cgroup freezer 实现暂停/取消暂停。如果我没记错的话,当您将进程放入冷冻机(或其 cgroup)时,您会阻止内核任务调度程序执行该进程的新任务(即:它会停止进程),但您不会杀死它们,它们会继续消耗它们正在使用的内存(尽管内核可能会将该内存移动到交换或固态磁盘)。我认为暂停容器使用的 CPU 资源微不足道。有关这方面的更多信息,我会查看此功能的拉取请求,Docker issue #5948

【讨论】:

  • 感谢您提供非常有说服力和全面的答案。我将把这个线程再打开一两天,然后接受你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
  • 2013-09-22
  • 2016-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多