Windows和OSX上的Docker远程API

有多种方法可以监视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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值