Dockerを操作できるDocker Remote APIをいろいろ触ってみたので覚書。
SwarmのService一覧を取得する
$ curl http://DOCKER.ENDPOINT/services/
[{
"ID": "SERVICE_ID",
"Version": {
"Index": 481
},
"CreatedAt": "2016-08-16T06:57:27.740891834Z",
"UpdatedAt": "2016-08-16T06:57:27.740891834Z",
"Spec": {
"Name": "EXAMPLE",
"TaskTemplate": {
"ContainerSpec": {
"Image": "XXXXXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/docker-example001:latest",
"Args": [
"-p",
"10001:8080"
]
},
"Resources": {
"Limits": {},
"Reservations": {}
},
"RestartPolicy": {
"Condition": "any",
"MaxAttempts": 0
},
"Placement": {}
},
"Mode": {
"Replicated": {
"Replicas": 1
}
},
"UpdateConfig": {
"Parallelism": 1,
"FailureAction": "pause"
},
"EndpointSpec": {
"Mode": "vip"
}
},
"Endpoint": {
"Spec": {}
},
"UpdateStatus": {
"StartedAt": "0001-01-01T00:00:00Z",
"CompletedAt": "0001-01-01T00:00:00Z"
}
}]
SwarmのServiceを検索する
filtersクエリを使うことでnode idかnode nameを使った検索ができます。
node idで検索
filters={ "id": [ 'NODE_ID' ] }
をURLエンコードして検索します。
$ curl "http://DOCKER.ENDPOINT/services?filters=\{%22id%22:\[%22NODE_ID%22\]\}"
node nameで検索
filters={ "name": [ 'NODE_ID' ] }
をURLエンコードして検索します。
$ curl "http://DOCKER.ENDPOINT/services?filters=\{%22name%22:\[%22NODE_NAME%22\]\}"
SwarmのServiceをnode ID指定で取得する
$ curl http://DOCKER.ENDPOINT/services/SERVICE_ID
戻り値
{
"ID": "SERVICE_ID",
"Version": {
"Index": 481
},
"CreatedAt": "2016-08-16T06:57:27.740891834Z",
"UpdatedAt": "2016-08-16T06:57:27.740891834Z",
"Spec": {
"Name": "EXAMPLE",
"TaskTemplate": {
"ContainerSpec": {
"Image": "XXXXXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/docker-example001:latest",
"Args": [
"-p",
"10001:8080"
]
},
"Resources": {
"Limits": {},
"Reservations": {}
},
"RestartPolicy": {
"Condition": "any",
"MaxAttempts": 0
},
"Placement": {}
},
"Mode": {
"Replicated": {
"Replicas": 1
}
},
"UpdateConfig": {
"Parallelism": 1,
"FailureAction": "pause"
},
"EndpointSpec": {
"Mode": "vip"
}
},
"Endpoint": {
"Spec": {}
},
"UpdateStatus": {
"StartedAt": "0001-01-01T00:00:00Z",
"CompletedAt": "0001-01-01T00:00:00Z"
}
}
取れるデータは一覧とID指定どちらも同じ内容っぽい。
なのでlistでとってIDから詳細取りに行くより、listの方使った方が手っ取り早い気がする。serviceの数が多くなるとしんどくなりそうですが。