已停止的Docker容器的资源使用情况

时间:2015-01-06 13:04:16

标签: docker lxc

Docker让它很容易停下来重启容器。它还能够暂停然后取消暂停容器。 Docker docs状态

  

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

我通过建立一个运行memcached的容器来测试这个,给memcache写了一个值然后

  • 停止&然后重新启动容器 - memcached值消失了
  • 暂停&然后取消暂停容器 - memcached值仍然完整

在文档中的某个地方 - 我再也找不到精确的文档 - 我读到停止的容器不消耗CPU或内存。但是:

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

对于任何可能澄清这些问题的人,我都是最有责任的。

1 个答案:

答案 0 :(得分:15)

我不是码头核心的专家,​​但我会尝试回答其中的一些问题。

  
      
  1. 我认为保留文件系统状态意味着容器仍然占用主机文件上的一些空间   系统
  2.   

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

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

据我所知,它不应该是任何表演。停止容器时,docker守护程序会将SIGTERM和SIGKILL发送到该容器的所有进程,如docker CLI documentation中所述:

  

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

     

通过发送SIGTERM然后在发送SIGKILL之后停止正在运行的容器   宽限期

     

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


  

3.最后,如果Paused容器在何时保持其内存状态       Unpaaused - 正如他们记住memcached的能力所证明的那样       密钥 - 它们对CPU和内存有不同的影响吗?

正如@Usman所说,docker使用cgroup冷冻器实现暂停/取消暂停。如果我没有错,当你把一个进程放在冰箱(或它的cgroup)中时,你会阻止从内核任务调度程序执行该进程的新任务(即:它会停止进程),但你不要#39; t杀死他们并且他们继续消耗他们正在使用的内存(尽管内核可能会将该内存移动到交换或固态磁盘)。暂停容器使用的CPU资源我认为是微不足道的。有关此内容的详细信息,请查看此功能的提取请求Docker issue #5948