ようへいの日々精進XP

よかろうもん

docker API を使ってみる

はじめに

  • dockerAPI も提供されているので使ってみる

参考


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 を修正した後で、下記のように stopstartdocker を再起動する。

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

リモートアクセスしてみる

コンテナの一覧を取得する

dockerAPI はデフォルトで 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