接口

最后更新于:2022-04-01 00:52:16

hipyard的核心接口。这个接口可以管理集群中的所有操作。 ## 账户 * [账户列表](http://dockerpool.com/static/books/shipyard_doc/api.html#get-accounts) * [创建账户](http://dockerpool.com/static/books/shipyard_doc/api.html#post-accounts) * [删除账户](http://dockerpool.com/static/books/shipyard_doc/api.html#delete-account) ## 角色 * [角色列表](http://dockerpool.com/static/books/shipyard_doc/api.html#get-roles) * [角色详情](http://dockerpool.com/static/books/shipyard_doc/api.html#get-roles) * [创建角色](http://dockerpool.com/static/books/shipyard_doc/api.html#post-roles) * [删除角色](http://dockerpool.com/static/books/shipyard_doc/api.html#delete-role) ## 容器 * [容器列表](http://dockerpool.com/static/books/shipyard_doc/api.html#get-containers) * [发布容器](http://dockerpool.com/static/books/shipyard_doc/api.html#post-containers) * [容器详情](http://dockerpool.com/static/books/shipyard_doc/api.html#get-container) * [删除容器](http://dockerpool.com/static/books/shipyard_doc/api.html#delete-container) * [停止容器](http://dockerpool.com/static/books/shipyard_doc/api.html#stop-container) * [重启容器](http://dockerpool.com/static/books/shipyard_doc/api.html#restart-container) * [拓展容器](http://dockerpool.com/static/books/shipyard_doc/api.html#scale-container) * [获取容器日志](http://dockerpool.com/static/books/shipyard_doc/api.html#get-container-logs) ## 引擎 * [引擎列表](http://dockerpool.com/static/books/shipyard_doc/api.html#get-engines) * [引擎详情](http://dockerpool.com/static/books/shipyard_doc/api.html#get-engine) * [增加引擎](http://dockerpool.com/static/books/shipyard_doc/api.html#post-engine) * [删除引擎](http://dockerpool.com/static/books/shipyard_doc/api.html#delete-engine) ## Service Keys * [Service Keys列表](http://dockerpool.com/static/books/shipyard_doc/api.html#get-service-keys) * [增加Service Key](http://dockerpool.com/static/books/shipyard_doc/api.html#post-service-keys) * [删除Service Key](http://dockerpool.com/static/books/shipyard_doc/api.html#delete-service-key) ## Webhook Keys * [Webhook Keys列表](http://dockerpool.com/static/books/shipyard_doc/api.html#get-webhook-keys) * [增加Webhook Key](http://dockerpool.com/static/books/shipyard_doc/api.html#post-webhook-key) * [删除Webhook Key](http://dockerpool.com/static/books/shipyard_doc/api.html#delete-webhook-key) ## 事件 * [事件列表](http://dockerpool.com/static/books/shipyard_doc/api.html#get-events) ## 集群 * [集群详情](http://dockerpool.com/static/books/shipyard_doc/api.html#get-cluster-info) ## Docker中心 * [发布](http://dockerpool.com/static/books/shipyard_doc/api.html#deloyment) ## 身份验证 要使用Shipyard接口就必要要身份验证。要使用接口,需要创建一个[Service Key](http://dockerpool.com/service_keys.html)。所有的请求都必须在请求头里添加`X-Service-Key`。 ~~~ curl -s -H "X-Service-Key: Lpc.usH1skelCuqwvjAtF.lJsWGwaKiwey2K" \ http://localhost:8080/api/cluster/info { "reserved_memory": 1024, "reserved_cpus": 0.32, "image_count": 17, "engine_count": 1, "container_count": 4, "memory": 4096, "cpus": 4 } ~~~ ## 账户 ### GET /api/accounts 获取账户列表 Request `GET /api/accounts HTTP/1.1` Response ~~~ [ { "role": { "name": "admin", "id": "8c10fe3d-bf10-4bb9-ab4c-002502b71f13" }, "password": "$2a$10$UvzJ8tssyF0Uvpaxmr06QOVbyJn5gTS4gDLapwo", "username": "admin", "id": "5f8e6567-9244-4fb2-bde9-24fb5e630b63" }, { "role": { "name": "user", "id": "ddc9a1b1-771b-4a07-807a-42cd027922a5" }, "password": "$2a$10$EEkqHiOjC.018pnqr1giDe0ODVcGaDUC/2lXg", "username": "test", "id": "44a22dd3-ae74-4fe3-bdf6-58bbd0094f98" } ] ~~~ ### POST /api/accounts 创建账户 Request ~~~ POST /api/accounts HTTP/1.1 Content-Type application/json { "username": "foo", "password": "bar", "role": { "name": "user" } } ~~~ Response `HTTP/1.1 204 No Content` ### DELETE /api/accounts 删除账户 Request ~~~ DELETE /api/accounts HTTP/1.1 Content-Type application/json { "username": "foo" } ~~~ Response `HTTP/1.1 204 No Content` ## 角色 ### GET /api/roles 获取角色列表 Request `GET /api/roles HTTP/1.1` Response ~~~ [ { "name": "admin", "id": "448ebe2d-89d9-412c-aab9-ad774d1ec78f" }, { "name": "user", "id": "2243edf5-55f1-43ad-9ebb-c36c5233f007" } ] ~~~ ### GET /api/roles/ 查看角色详情 Request `GET /api/roles/admin HTTP/1.1` Response ~~~ { "name": "admin", "id": "448ebe2d-89d9-412c-aab9-ad774d1ec78f" } ~~~ ### POST /api/roles 创建角色 Request ~~~ POST /api/roles HTTP/1.1 Content-Type application/json { "name": "test" } ~~~ Response `HTTP/1.1 204 No Content` ### DELETE /api/roles 删除角色 Request ~~~ DELETE /api/roles HTTP/1.1 Content-Type application/json { "name": "test" } ~~~ Response `HTTP/1.1 204 No Content` ## 容器 ### GET /api/containers 容器列表 Response ~~~ GET /api/containers HTTP/1.1 [ { "state": { "started_at": "2014-09-12T00:48:23.824260519Z", "pid": 5845, "running": true }, "ports": [ { "container_port": 8080, "port": 49159, "proto": "tcp" } ], "engine": { "labels": [ "local", "dev" ], "memory": 4096, "cpus": 4, "addr": "http://172.16.1.50:2375", "id": "local" }, "image": { "restart_policy": {}, "labels": [ "" ], "type": "service", "hostname": "cbe68bf32f1a", "environment": { "GOROOT": "/goroot", "GOPATH": "/gopath" }, "memory": 256, "cpus": 0.08, "name": "ehazlett/go-demo:latest" }, "id": "cbe68bf32f1a08218693dbee9c66ea018c1a99c75c463a76b" }, { "state": { "started_at": "2014-09-12T00:48:23.824260519Z", "pid": 5846, "running": true }, "ports": [ { "container_port": 8080, "port": 49158, "proto": "tcp" } ], "engine": { "labels": [ "local", "dev" ], "memory": 4096, "cpus": 4, "addr": "http://172.16.1.50:2375", "id": "local" }, "image": { "restart_policy": {}, "labels": [ "" ], "type": "service", "hostname": "eca254ecd76e", "environment": { "GOROOT": "/goroot", "GOPATH": "/gopath" }, "memory": 256, "cpus": 0.08, "name": "ehazlett/go-demo:latest" }, "id": "eca254ecd76eb9d887995114ff811cc5b7c14fe13630" } ] ~~~ ### POST /api/containers 发布容器 Request ~~~ POST /api/containers HTTP/1.1 Content-Type application/json { "name": "ehazlett/go-demo", "cpus": 0.1, "memory": 32, "type": "service", "hostname": "", "domain": "", "labels": ["local"], "args": [], "environment": { "FOO": "bar" }, "restart_policy": { "name": "always" }, "bind_ports": [ { "host_ip": "10.1.2.3", "proto": "tcp", "container_port": 8080 }, { "proto": "tcp", "port": 80, "container_port": 8080 } ], "links": { "redis": "db" } } ~~~ Response ~~~ HTTP/1.1 201 Created [ { "state": { "started_at": "2014-09-12T00:48:23.824260519Z", "pid": 5890, "running": true }, "ports": [ { "container_port": 8080, "host_ip": "10.1.2.3", "port": 49172, "proto": "tcp" } ], "engine": { "labels": [ "local", "dev" ], "memory": 4096, "cpus": 4, "addr": "http://172.16.1.50:2375", "id": "local" }, "image": { "restart_policy": { "name": "always" }, "labels": [ "local" ], "bind_ports": [ { "proto": "tcp", "port": 49153, "container_port": 8080 }, { "proto": "tcp", "port": 80, "container_port": 8080 } ], "links": { "redis": "db" }, "type": "service", "memory": 32, "cpus": 0.1, "name": "ehazlett/go-demo" }, "id": "4a5da04b8428e7241a9d9993699513d11b89948399dedfa12" } ] ~~~ ### GET /api/containers/ 容器详情 Request `GET /api/containers/3e532b HTTP/1.1` Response ~~~ { "state": { "started_at": "2014-09-12T00:48:23.824260519Z", "pid": 5891, "running": true }, "ports": [ { "container_port": 8080, "port": 49155, "proto": "tcp" } ], "engine": { "labels": [ "local", "dev" ], "memory": 4096, "cpus": 4, "addr": "http://172.16.1.50:2375", "id": "local" }, "image": { "restart_policy": {}, "labels": [ "local" ], "type": "service", "hostname": "demo-1", "environment": { "GOROOT": "/goroot", "GOPATH": "/gopath" }, "memory": 256, "cpus": 0.08, "name": "ehazlett/go-demo:latest" }, "id": "3e532b000891e90e93ca3781031e7c1ddb76d8378dfdfd3" } ~~~ ### DELETE /api/containers/ 删除容器 Request `DELETE /api/containers/3e532 HTTP/1.1` Response `HTTP/1.1 204 No Content` ## GET /api/containers//stop 停止容器 Request `GET /api/containers/3e532/stop HTTP/1.1` Response `HTTP/1.1 204 No Content` ## GET /api/containers//restart 重启容器 Request `GET /api/containers/3e532/restart HTTP/1.1` Response `HTTP/1.1 204 No Content` ## GET /api/containers//scale?count= 拓展容器到指定数目 Request `GET /api/containers/3e532/scale?count=10 HTTP/1.1` Response `HTTP/1.1 204 No Content` ## GET /api/containers//logs 容器日志 Request `GET /api/containers/3e532b/logs HTTP/1.1` Response ~~~ listening on :8080 ~~~ ## 引擎 ### GET /api/engines 引擎列表 Request `GET /api/engines HTTP/1.1` Response ~~~ GET /api/engines HTTP/1.1 [ { "engine": { "labels": [ "local", "dev" ], "memory": 4096, "cpus": 4, "addr": "http://172.16.1.50:2375", "id": "local" }, "id": "99095f5f-7579-4a70-9369-04ad73c21312" } ] ~~~ ### GET /api/engines/ 引擎详情 Request `GET /api/engines/local HTTP/1.1` Response ~~~ GET /api/engines/local HTTP/1.1 { "engine": { "labels": [ "local", "dev" ], "memory": 4096, "cpus": 4, "addr": "http://172.16.1.50:2375", "id": "local" }, "id": "99095f5f-7579-4a70-9369-04ad73c21312" } ~~~ ### POST /api/engines 向集群中增加引擎 Request ~~~ POST /api/engines HTTP/1.1 Content-Type application/json { "id": "local", "ssl_cert": "", "ssl_key": "", "ca_cert": "", "engine": { "id": "local", "addr": "http://10.1.2.3:2375", "cpus": 4.0, "memory": 8192, "labels": [ "local", "dev" ] } } ~~~ Response `HTTP/1.1 201 Created` ### DELETE /api/engines/ 删除引擎 Request `DELETE /api/engines/99095f5f-7579-4a70-9369-04ad73c21312 HTTP/1.1` Response `HTTP/1.1 204 No Content` ## Service Keys ### GET /api/servicekeys service keys列表 Request `GET /api/servicekeys HTTP/1.1` Response ~~~ GET /api/servicekeys HTTP/1.1 [ { "description": "test", "key": "3pYgOl4K7vlkymoi1TMLIAQIJqcYhkGWY04." }, { "description": "demo", "key": "Lpc.usH1skelCuqwvjAtF.lJsWGwaKiwey2K" } ] ~~~ ### POST /api/servicekeys 创建service key Request ~~~ POST /api/servicekeys HTTP/1.1 Content-Type application/json { "description": "test key" } ~~~ Response ~~~ { "description": "test key", "key": "zuoWetDKDRhPyUNRZro5cLo7yaFLKgzcqijW" } ~~~ ### DELETE /api/servicekeys 删除service key Request ~~~ DELETE /api/servicekeys HTTP/1.1 Content-Type application/json { "key": "zuoWetDKDRhPyUNRZro5cLo7yaFLKgzcqijW" } ~~~ Response `HTTP/1.1 204 No Content` ## Webhook Keys Webhook keys被用来发布镜像到Docker中心。 ### GET /api/webhookkeys webhook keys列表 Request `GET /api/webhookkeys HTTP/1.1` Response ~~~ GET /api/servicekeys HTTP/1.1 [ { "key": "fc563339166b3c69", "image": "ehazlett/go-demo", "id": "d7c68d6f-65bc-4e0c-8134-8e281a6b4d9b" } ] ~~~ ### POST /api/webhookkeys 增加webhook key Request ~~~ POST /api/webhookkeys HTTP/1.1 Content-Type application/json { "image": "ehazlett/redis" } ~~~ Response ~~~ { "image": "ehazlett/redis", "key":"8d710a03c7d965aa" } ~~~ ### DELETE /api/webhooks/ 删除webhook key Request `DELETE /api/webhooks/8d710a03c7d965aa HTTP/1.1` Response `HTTP/1.1 204 No Content` # Info ### GET /api/cluster/info 查看集群信息 Request `GET /api/cluster/info HTTP/1.1` Response ~~~ GET /api/cluster/info HTTP/1.1 { "reserved_memory": 768, "reserved_cpus": 0.24, "image_count": 6, "engine_count": 1, "container_count": 3, "memory": 4096, "cpus": 4 } ~~~ ## Docker中心 ### POST /hub/webhook/ 通过Docker中心webhook自动部署。 将会在从Docker中心获取最新镜像并且重启集群中的所有镜像名称容器。查看如下例子: 要使自动部署生效,你可以在Docker中心的库设置中添加一个Webbook指向`http:///hub/webhook/` Request `POST /hub/webhook HTTP/1.1` ~~~ POST /hub/webhook HTTP/1.1 Content-Type application/json { "push_data":{ "pushed_at":1385141110, "images":[ "imagehash1", "imagehash2", "imagehash3" ], "pusher":"username" }, "repository":{ "status":"Active", "description":"my docker repo that does cool things", "is_trusted":false, "full_description":"This is my full description", "repo_url":"https://registry.hub.docker.com/u/username/reponame/", "owner":"username", "is_official":false, "is_private":false, "name":"reponame", "namespace":"username", "star_count":1, "comment_count":1, "date_created":1370174400, "dockerfile":"my full dockerfile is listed here", "repo_name":"username/reponame" } } ~~~ Response `HTTP/1.1 200 OK`
';