©
本文档使用
php.cn手册 发布
Engine API是Docker Engine提供的API。它允许您在自己的应用程序中控制Docker的各个方面,构建工具来管理和监视在Docker上运行的应用程序,甚至可以使用它在Docker本身上构建应用程序。
它是Docker客户端用来与引擎通信的API,所以Docker客户端能够做的一切都可以用API来完成。例如:
运行和管理容器
管理群集节点和服务
读取日志和度量
创建和管理群集
图像提取与管理
管理网络和卷
API可以用任何HTTP客户端访问,但我们也提供Python和GoSDK...
您应该使用的API版本取决于您的Docker守护程序的版本。当添加新功能时,会发布新版本的API。Docker API是向后兼容的,因此您不需要更新使用API的代码,除非您需要利用新功能。
若要查看您的Docker守护进程和客户端支持的API的最高版本,请使用docker version
*
$ docker version Client: Version: 17.04.0-ce API version: 1.28 Go version: go1.7.5 Git commit: 4845c56 Built: Wed Apr 5 06:06:36 2017 OS/Arch: darwin/amd64 Server: Version: 17.04.0-ce API version: 1.28 (minimum version 1.12) Go version: go1.7.5 Git commit: 4845c56 Built: Tue Apr 4 00:37:25 2017 OS/Arch: linux/amd64 Experimental: true
例如,docker run
命令可以很容易地在各种编程语言中实现,并且可以通过以下方式直接访问apicurl
*
Python
Go
curl
import docker client = docker.from_env() print client.containers.run("alpine", ["echo", "hello", "world"])
package main import ( "io" "os" "github.com/moby/moby/client" "github.com/moby/moby/api/types" "github.com/moby/moby/api/types/container" "golang.org/x/net/context" ) func main() { ctx := context.Background() cli, err := client.NewEnvClient() if err != nil { panic(err) } _, err = cli.ImagePull(ctx, "docker.io/library/alpine", types.ImagePullOptions{}) if err != nil { panic(err) } resp, err := cli.ContainerCreate(ctx, &container.Config{ Image: "alpine", Cmd: []string{"echo", "hello world"}, }, nil, nil, "") if err != nil { panic(err) } if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil { panic(err) } if _, err = cli.ContainerWait(ctx, resp.ID); err != nil { panic(err) } out, err := cli.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{ShowStdout: true}) if err != nil { panic(err) } io.Copy(os.Stdout, out) }
$ curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \ -d '{"Image": "alpine", "Cmd": ["echo", "hello world"]}' \ -X POST http:/v1.24/containers/create {"Id":"1c6594faf5","Warnings":null} $ curl --unix-socket /var/run/docker.sock -X POST http:/v1.24/containers/1c6594faf5/start $ curl --unix-socket /var/run/docker.sock -X POST http:/v1.24/containers/1c6594faf5/wait {"StatusCode":0} $ curl --unix-socket /var/run/docker.sock "http:/v1.24/containers/1c6594faf5/logs?stdout=1" hello world