Статьи

Docker Remote API в Windows и OSX

Существует несколько способов мониторинга контейнеров Docker.

  • Docker CLI предоставляет API docker container stats Docker, который предоставляет основную информацию о запущенных контейнерах.
  • Docker Remote API предоставляет более подробную информацию о контейнерах.
  • Начиная с Docker 1.13, есть экспериментальная функция с конечной точкой Prometheus
  • cAdvisor — это инструмент с открытым исходным кодом, который обеспечивает последние характеристики использования контейнера и производительность. Эти данные могут храниться в базе данных временных рядов, такой как InfluxDB. Затем эти данные можно отобразить на графике с использованием панели управления Kibana.

Эти параметры были подробно описаны в предыдущем блоге .

Есть и другие коммерческие опции, такие как Docker EE , Sysdig, Datadog, New Relic, App Dynamics и другие. Если вы работаете с контейнерами в AWS, CloudWatch может обеспечить интегрированный мониторинг.

OSX — моя основная платформа разработки. Но недавно мне понадобился способ мониторинга контейнеров Docker с помощью Remote API (или REST API) на компьютере с Windows. Вывод API REST точно такой же, независимо от операционной системы. Но способ доступа к API-интерфейсу Docker REST с помощью curl отличается на OSX и Windows-машине. В этом блоге объясняется, как именно получить доступ к этому API в этих двух операционных системах.

Ознакомьтесь со спецификацией 1.27 swagger, чтобы узнать больше о возможностях REST API. Более приятную и удобочитаемую версию API можно увидеть с помощью Swagger UI . Это не работает, пока # 32649 не будет исправлено.

Полные подробности о том, как REST API соответствует различным версиям Docker, описаны в Docker REST API Versioning .

Мы углубимся в это чуть позже, но сначала давайте посмотрим, как получить доступ к этому API.

Docker Remote API в OSX

В OSX curl подключается с использованием доменного сокета Unix, как показано ниже:

1
curl --unix-sock /var/run/docker.sock http://localhost/containers//stats

Контейнер WildFly может быть запущен как:

1
docker run --name web -d jboss/wildfly

Статистика может быть получена с помощью команды:

1
curl --unix-socket /var/run/docker.sock http://localhost/containers/web/stats

Это начнет печатать статистику как:

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
   "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 может быть вызван очень легко с этим. Это просто и понятно.

Установите Docker на Windows

Установка Docker в Windows зависит от вида вашей операционной системы.

Используете ли вы Windows 10+ Pro 64-bit, затем используйте Docker для Windows .

Если вы используете более старую версию Windows, вам нужно использовать Docker Toolbox .

Вы устанавливаете Windows на виртуальной машине? Тогда Virtual Box не может быть использован для создания виртуальной машины. Это связано с тем, что Virtual Box не поддерживает вложенную виртуализацию . Это необходимо, поскольку Docker Toolbox использует Virtual Box для создания и запуска Docker Machine. VMWare Fusion, похоже, здесь работает нормально.

Теперь, когда вы знаете, что необходимо использовать VMWare Fusion, убедитесь, что вы включили вложенную виртуализацию перед запуском виртуальной машины.

Большое спасибо Стефану Шереру ( @stefscherer ) за помощь в понимании деталей конфигурации Windows.

Давайте посмотрим, как теперь можно вызывать REST API Docker.

Docker Remote API в Windows 7/8

В этом разделе показано, как вызвать REST API с помощью curl в Windows 7/8.

API REST может быть вызван с помощью curl как показано ниже:

1
curl --cert <CERT> --cacert <CA_CERT> --key <KEY> https://localhost/containers/<name-or-id>/stats

Прежде всего, REST API, /containers/<name-or-id>/stats , точно такой же. Способ, которым этот API может быть вызван, немного отличается.

Существует четыре различия: первые три параметра указывают учетные данные безопасности для Docker Machine, сгенерированной Docker Toolbox на вашем компьютере с Windows:

  • <CERT> — это сертификат SSL для Docker Machine
  • <CA_CERT> — это сертификат <CA_CERT> сертификации для Docker Machine
  • <KEY> — это ключ, сгенерированный для Docker Machine

Значения этих параметров конфигурации — это значения, сгенерированные интерфейсом командной строки docker-machine .

Последнее изменение заключается в том, что протокол изменяется с http на https .

Вот точная команда, которая работала на Windows 7 VM:

1
$ 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.

Теперь, когда вы знаете, как использовать этот API в OSX и Windows, вы также можете использовать этот API для всего, что делает Docker CLI. Это связано с тем, что Docker CLI — это просто удобная оболочка для REST API. Таким образом, команда docker container run вызывает соответствующий REST API на хосте Docker.

Docker Remote API в Windows 10

Если вы используете Windows 10, используйте Docker для Windows . После этого вам нужно выяснить, какую команду curl нужно использовать. Есть несколько вариантов:

  • Используйте оболочку Bash в Windows . Он имеет команду curl которая работает как команда Unix, которую мы все хорошо знаем. В этом случае REST API может быть вызван как:
    1
    curl http://localhost:2375/containers/web/stats

    Docker для Windows прослушивает порт 2375 в Windows.

  • Если вы пользователь Powershell, установите команду curl как:
    1
    choco install -u curl

    Теперь команда для вызова REST API:

    1
    curl.exe http://localhost:2375/containers/web/stats

    Обратите внимание, что в Powershell есть псевдоним curl и это псевдоним Invoke-WebRequest . Поэтому обязательно используйте curl.exe для вызова REST API, поскольку эта команда установлена ​​с использованием Chocolatey.

Этот блог предоставил различные варианты вызова API Docker Remote с помощью curl в Windows и OSX.

Ссылка: Docker Remote API для Windows и OSX от нашего партнера по JCG Аруна Гупта из Miles to go 3.0… блог.