有多种方法可以监视Docker容器。
- Docker CLI提供了Docker
docker container stats
API,该API提供了有关正在运行的容器的基本信息。 - Docker Remote API提供了有关容器的更多详细信息。
- 盯着Docker 1.13,有一个带有Prometheus端点的实验功能
- cAdvisor是一个开放源代码工具,可提供最新的容器使用情况和性能特征。 该数据可以存储在时间序列数据库中,例如InfluxDB。 然后可以使用Kibana仪表板在花式图中显示此数据。
在较早的博客中详细介绍了这些选项。
还有其他商业选项,如Docker EE ,Sysdig,Datadog,New Relic,App Dynamics等。 如果您正在AWS上运行容器,则CloudWatch可以提供集成的监控。
OSX是我的主要开发平台。 但是最近,我需要一种在Windows机器上使用Remote API(即REST API)监视Docker容器的方法。 REST API的输出与操作系统完全相同。 但是在OSX和Windows机器上,使用curl
访问Docker REST API的方式有所不同。 该博客将说明如何在这两个操作系统上完全访问此API。
查阅1.27 swagger规范以了解有关REST API功能的更多信息。 使用Swagger UI可以看到API更好,更易读的版本。 直到#32649已修复,这才中断。
Docker REST API版本控制中介绍了有关REST API如何对应于不同Docker版本的完整详细信息。
稍后我们将对此进行深入研究,但首先让我们看一下如何访问此API。
OSX上的Docker远程API
在OSX上, curl
使用Unix域套接字连接,如下所示:
curl --unix-sock /var/run/docker.sock http://localhost/containers//stats
可以通过以下方式启动WildFly容器:
docker run --name web -d jboss/wildfly
然后可以使用以下命令获取统计信息:
curl --unix-socket /var/run/docker.sock http://localhost/containers/web/stats
这将开始打印统计信息,如下所示:
{
"read":"2017-04-16T21:25:06.99499178Z",
"preread":"0001-01-01T00:00:00Z",
"pids_stats":{
"current":40
},
"blkio_stats":{
"io_service_bytes_recursive":[
{
"major":8,
"minor":0,
"op":"Read",
"value":0
},
{
"major":8,
"minor":0,
"op":"Write",
"value":4096
},
{
"major":8,
"minor":0,
"op":"Sync",
"value":0
},
{
"major":8,
"minor":0,
"op":"Async",
"value":4096
},
{
"major":8,
"minor":0,
"op":"Total",
"value":4096
}
],
"io_serviced_recursive":[
{
"major":8,
"minor":0,
"op":"Read",
"value":0
},
{
"major":8,
"minor":0,
"op":"Write",
"value":1
},
{
"major":8,
"minor":0,
"op":"Sync",
"value":0
},
{
"major":8,
"minor":0,
"op":"Async",
"value":1
},
{
"major":8,
"minor":0,
"op":"Total",
"value":1
}
],
"io_queue_recursive":[
],
"io_service_time_recursive":[
],
"io_wait_time_recursive":[
],
"io_merged_recursive":[
],
"io_time_recursive":[
],
"sectors_recursive":[
]
},
"num_procs":0,
"storage_stats":{
},
"cpu_stats":{
"cpu_usage":{
"total_usage":9569101779,
"percpu_usage":[
4920699125,
4648402654
],
"usage_in_kernelmode":1050000000,
"usage_in_usermode":7730000000
},
"system_cpu_usage":5431500000000,
"online_cpus":2,
"throttling_data":{
"periods":0,
"throttled_periods":0,
"throttled_time":0
}
},
"precpu_stats":{
"cpu_usage":{
"total_usage":0,
"usage_in_kernelmode":0,
"usage_in_usermode":0
},
"throttling_data":{
"periods":0,
"throttled_periods":0,
"throttled_time":0
}
},
"memory_stats":{
"usage":266448896,
"max_usage":285159424,
"stats":{
"active_anon":241647616,
"active_file":90112,
"cache":225280,
"dirty":20480,
"hierarchical_memory_limit":9223372036854772000,
"hierarchical_memsw_limit":9223372036854772000,
"inactive_anon":20971520,
"inactive_file":135168,
"mapped_file":32768,
"pgfault":81529,
"pgmajfault":1,
"pgpgin":76795,
"pgpgout":12624,
"rss":262619136,
"rss_huge":0,
"swap":57344,
"total_active_anon":241647616,
"total_active_file":90112,
"total_cache":225280,
"total_dirty":20480,
"total_inactive_anon":20971520,
"total_inactive_file":135168,
"total_mapped_file":32768,
"total_pgfault":81529,
"total_pgmajfault":1,
"total_pgpgin":76795,
"total_pgpgout":12624,
"total_rss":262619136,
"total_rss_huge":0,
"total_swap":57344,
"total_unevictable":0,
"total_writeback":0,
"unevictable":0,
"writeback":0
},
"limit":2096181248
},
"name":"/web",
"id":"b6ad4af36f05ce100877d2d60c72e01b87f3627682e4492e7abe2a099b709953",
"networks":{
"eth0":{
"rx_bytes":2764,
"rx_packets":50,
"rx_errors":0,
"rx_dropped":0,
"tx_bytes":0,
"tx_packets":0,
"tx_errors":0,
"tx_dropped":0
}
}
}
这些统计信息每秒钟刷新一次。
任何其他REST API都可以很容易地被调用。 这很简单明了。
在Windows上安装Docker
Windows上的Docker安装取决于您的操作系统的风格。
您要使用Windows 10+ Pro 64位系统,然后使用Docker for Windows 。
如果使用任何较旧版本的Windows,则需要使用Docker Toolbox 。
您要在虚拟机中安装Windows吗? 然后,Virtual Box无法用于创建VM。 这是因为Virtual Box不支持嵌套虚拟化 。 这是必需的,因为Docker Toolbox使用Virtual Box创建和启动Docker Machine。 VMWare Fusion似乎在这里工作正常。
既然您知道需要使用VMWare Fusion,请确保在启动虚拟机之前启用嵌套虚拟化 。
非常感谢Stefan Scherer( @stefscherer )帮助我了解Windows配置详细信息。
让我们看看现在如何调用Docker REST API。
Windows 7/8上的Docker远程API
本节说明如何在Windows 7/8上使用curl
调用REST API。
可以使用curl
调用REST API,如下所示:
curl --cert <CERT> --cacert <CA_CERT> --key <KEY> https://localhost/containers/<name-or-id>/stats
首先,REST API /containers/<name-or-id>/stats
完全相同。 该API的调用方式略有不同。
有四个区别:前三个参数为Windows框中的Docker Toolbox生成的Docker Machine指定安全凭证:
-
<CERT>
是Docker Machine的SSL证书 -
<CA_CERT>
是Docker计算机的证书颁发机构证书 -
<KEY>
是为Docker Machine生成的密钥
这些配置参数的值是由docker-machine
CLI生成的值。
最后的更改是协议从http
更改为https
。
这是在Windows 7 VM上运行的确切命令:
$ curl --cert /c/Users/Arun\ Gupta/.docker/machine/machines/default/cert.pem --cacert /c/Users/Arun\ Gupta/.docker/machine/machines/default/ca.pem --key /c/Users/Arun\ Gupta/.docker/machine/machines/default/key.pem https://192.168.99.100:2376/containers/web/stats
此调用将在Windows 7 VM上输出完全相同的统计信息输出。
既然您知道如何在OSX和Windows上使用此API,您还可以使用此API进行Docker CLI的所有操作。 这是因为Docker CLI只是REST API的便捷包装。 因此, docker container run
命令正在Docker主机上调用适当的REST API。
Windows 10上的Docker远程API
如果您使用的是Windows 10,请使用Docker for Windows 。 之后,您需要确定要使用哪个curl
命令。 有两种选择:
- 在Windows上使用Bash shell 。 它具有
curl
命令,其作用与Unix命令类似,众所周知。 在这种情况下,REST API可以通过以下方式调用:curl http://localhost:2375/containers/web/stats
Windows的Docker侦听Windows的端口
2375
。 - 如果您是Powershell用户,则将
curl
命令安装为:choco install -u curl
现在,调用REST API的命令是:
curl.exe http://localhost:2375/containers/web/stats
注意,Powershell中有一个
curl
别名,它是Invoke-WebRequest
的别名。 因此,请确保使用curl.exe
调用REST API,因为这是使用Chocolatey安装的命令。
该博客提供了有关如何在Windows和OSX上使用curl
调用Docker远程API的不同选项。
翻译自: https://www.javacodegeeks.com/2017/04/docker-remote-api-windows-osx.html