芳卉 發表於 2017-11-13 08:17:00

查看 docker 容器使用的资源

<p><span style="font-family: Microsoft YaHei; font-size: 15px">在容器的使用过程中,如果能及时的掌握容器使用的系统资源,无论对开发还是运维工作都是非常有益的。幸运的是 docker 自己就提供了这样的命令:docker stats。</span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">默认输出</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">docker stats 命令用来显示容器使用的系统资源。不带任何选项执行 docker stats 命令:</span></p>
<div class="cnblogs_code">
<pre><span style="font-family: Microsoft YaHei; font-size: 15px">$ docker stats</span></pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2017.cnblogs.com/blog/952033/201711/952033-20171112122248684-1876316537.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">默认情况下,stats 命令会每隔 1 秒钟刷新一次输出的内容直到你按下 ctrl + c。下面是输出的主要内容:</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">[<strong>CONTAINER</strong>]:以短格式显示容器的 ID。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">[<strong>CPU %</strong>]:CPU 的使用情况。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">[<strong>MEM USAGE / LIMIT</strong>]:当前使用的内存和最大可以使用的内存。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">[<strong>MEM %</strong>]:以百分比的形式显示内存使用情况。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">[<strong>NET I/O</strong>]:网络 I/O 数据。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">[<strong>BLOCK I/O</strong>]:磁盘 I/O 数据。 </span><br><span style="font-family: Microsoft YaHei; font-size: 15px">[<strong>PIDS</strong>]:PID 号。</span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">只返回当前的状态</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">如果不想持续的监控容器使用资源的情况,可以通过 --no-stream 选项只输出当前的状态:</span></p>
<div class="cnblogs_code">
<pre>$ docker stats --no-stream</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2017.cnblogs.com/blog/952033/201711/952033-20171112122435513-2143443497.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">这样输出的结果就不会变化了,看起来省劲不少。</span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">只输出指定的容器</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">如果我们只想查看个别容器的资源使用情况,可以为 docker stats 命令显式的指定目标容器的名称或者是 ID:</span></p>
<div class="cnblogs_code">
<pre>$ docker stats --no-stream registry <span style="color: rgba(128, 0, 128, 1)">1493</span></pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2017.cnblogs.com/blog/952033/201711/952033-20171112122547559-751487240.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">当有很多的容器在运行时,这样的结果看起来会清爽一些。这里的 registry 和 1493 分别是容器的名称和容器的 ID。注意,多个容器的名称或者是 ID 之间需要用空格进行分割。</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">细心的同学可能已经发现了,第一列不再显示默认的容器 ID,而是显示了我们传入的容器名称和 ID。基于此,我们可以通过简单的方式使用容器的名称替代默认输出中的容器 ID:</span></p>
<div class="cnblogs_code">
<pre>$ docker stats $(docker <span style="color: rgba(0, 0, 255, 1)">ps</span> --format={{.Names}})</pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2017.cnblogs.com/blog/952033/201711/952033-20171112122722153-981911645.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">用容器的名称替代 ID 后输出的结果是不是友好一些?</span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">格式化输出的结果</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">我们在前面搞了点小手段把输出中的容器 ID 替换成了名称。其实 docker stats 命令支持我们通过 --format 选项自定义输出的内容和格式:</span></p>
<div class="cnblogs_code">
<pre>$ docker stats --format <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2017.cnblogs.com/blog/952033/201711/952033-20171112122833575-1023683483.png"></span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">上面的命令中我们只输出了 Name, CPUPerc 和 Memusage 三列。下面是自定义的格式中可以使用的所有占位符:</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">.Container&nbsp;&nbsp; &nbsp;根据用户指定的名称显示容器的名称或 ID。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">.Name&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 容器名称。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">.ID&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 容器 ID。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">.CPUPerc&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CPU 使用率。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">.MemUsage&nbsp; 内存使用量。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">.NetIO&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 网络 I/O。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">.BlockIO&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 磁盘 I/O。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">.MemPerc&nbsp;&nbsp; &nbsp; 内存使用率。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">.PIDs&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PID 号。</span><br><span style="font-family: Microsoft YaHei; font-size: 15px">有了这些信息我们就可以完全按照自己的需求或者是偏好来控制 docker stats 命令输出的内容了。</span></p>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">除了以 table 格式输出结果,还可以通过 format 选项输出 json 格式的结果:</span></p>
<div class="cnblogs_code">
<pre>$ docker stats --no-stream --<span style="color: rgba(0, 0, 0, 1)">format \
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{\"container\":\"{{ .Container }}\",\"memory\":{\"raw\":\"{{ .MemUsage }}\",\"percent\":\"{{ .MemPerc }}\"},\"cpu\":\"{{ .CPUPerc }}\"}</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p><span style="font-family: Microsoft YaHei; font-size: 15px"><img src="http://images2017.cnblogs.com/blog/952033/201711/952033-20171112122954716-1276833887.png"></span></p>
<h1><span style="font-family: Microsoft YaHei; font-size: 18pt">总结</span></h1>
<p><span style="font-family: Microsoft YaHei; font-size: 15px">通过 docker stats 命令我们可以看到容器使用系统资源的情况。这为我们进一步的约束容器可用资源或者是调查与资源相关的问题提供了依据。除了 docker 自带的命令,像 glances 等工具也已经支持查看容器使用的资源情况了,有兴趣的朋友可以去了解一下。</span></p>

</div>
<div id="MySignature" role="contentinfo">
    <div>作者:sparkdev</div>
<div>出处:http://www.cnblogs.com/sparkdev/</div>
<div>本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。</div><br><br>
来源:https://www.cnblogs.com/sparkdev/p/7821376.html
頁: [1]
查看完整版本: 查看 docker 容器使用的资源