はじめに
docker
は API も提供されているので使ってみる
参考
- Docker Remote API
- Docker の Remote API + serverspec で CI
- Docker + Jenkins + serverspecでpuppetのmanifestをCIする
- How can I pretty-print JSON from the command line?
API を有効にする
docker
をインストールしただけでは Remote API は利用出来なかったので、以下のようにして利用出来るようにした。尚、試した docker のバージョンは下記の通り。
Client version: 0.6.3 Go version (client): go1.1.2 Git commit (client): b0a49a3
/etc/init/docker.conf を修正する
description "Docker daemon" start on filesystem and started lxc-net stop on runlevel [!2345] respawn script /usr/bin/docker -d -H=tcp://0.0.0.0:4243/ end script
docker を再起動する
/etc/init/docker.conf
を修正した後で、下記のように stop
と start
で docker
を再起動する。
sudo stop docker sudo start docker
なぜか sudo restart docker
では変更した内容が反映されなかった。
ローカルホストでの docker コマンド
Remote API からアクセス出来るようにした後で、ローカルホスト上で docker
コマンドを実行すると...
sudo docker ps
以下のようなエラーが出てしまう。
2013/10/01 00:25:18 Can't connect to docker daemon. Is 'docker -d' running on this host?
ヘルプに従って以下のようにアクセスする。
docker -H=tcp://127.0.0.1:4243 ps
リモートアクセスしてみる
コンテナの一覧を取得する
docker
の API はデフォルトで 4243
ポートで Listen しているので、以下のようにしてコンテナの一覧を取得してみる。
curl -X GET http://xxx.xxx.xxx.xxx:4243/containers/json?all=1 | python -mjson.tool
以下のような結果が出力される。
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1403 100 1403 0 0 7283 0 --:--:-- --:--:-- --:--:-- 7345 [ { "Command": "/bin/bash ", "Created": 1380370790, "Id": "d2f949118d07dc1c9b780bca0b3e821c67bc0289e3c21dcb1d1be05a84d90b56", "Image": "squeeze:latest", "Ports": null, "SizeRootFs": 0, "SizeRw": 0, "Status": "Exit 0" }, { "Command": "/bin/bash ", "Created": 1380210857, "Id": "4f7e0480d99ce0b25a6959e7d64df851fb4117a5c58e7e2bb50ecf528382a62b", "Image": "base:latest", "Ports": null, "SizeRootFs": 0, "SizeRw": 0, "Status": "Exit 1" } ]
おお。
コンテナイメージを取得する
curl -X GET http://xxx.xxx.xxx.xxx:4243/images/json?all=1 | python -mjson.tool
以下のようにイメージの一覧が取得出来る。
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1307 100 1307 0 0 17914 0 --:--:-- --:--:-- --:--:-- 18152 [ { "Created": 1380371138, "Id": "09c39c245bfb1425235da9cf8f636c956d55074bfcfc3ef1c9642eb52d02ffe3", "Repository": "inokappa/squeeze", "Size": 168145982, "Tag": "latest", "VirtualSize": 372818330 }, { "Created": 1380370759, "Id": "aae93d18ad66fc1245e451ccccd0e9b6159406b68a44743100063154b84e471a", "Repository": "squeeze", "Size": 204672348, "Tag": "latest", "VirtualSize": 204672348 } ]
コンテナのスタートとストップ
コンテナの一覧を取得した際の ID
を控えておくこと。
コンテナのスタート
curl -X POST http://xxx.xxx.xxx.xxx:4243/containers/${コンテナID}/start
起動するとコンテナのステータスが以下のようになる。
{ "Command": "/bin/bash ", "Created": 1380370790, "Id": "d2f949118d07dc1c9b780bca0b3e821c67bc0289e3c21dcb1d1be05a84d90b56", "Image": "squeeze:latest", "Ports": null, "SizeRootFs": 0, "SizeRw": 0, "Status": "Up 2 seconds" },
"Status": "Up 2 seconds"
となっている。
コンテナのストップ
curl -X POST http://xxx.xxx.xxx.xxx:4243/containers/${コンテナID}/stop
起動するとコンテナのステータスが以下のようになる。
{ "Command": "/bin/bash ", "Created": 1380370790, "Id": "d2f949118d07dc1c9b780bca0b3e821c67bc0289e3c21dcb1d1be05a84d90b56", "Image": "squeeze:latest", "Ports": null, "SizeRootFs": 0, "SizeRw": 0, "Status": "Exit 137" },
"Status": "Exit 137"
となっている。
ひとまず
- コンテナの一覧を取得出来た!
- イメージの一覧も取得出来た!
- まだまだ色々と出来そうな API