使用Docker Engine SDK开发
预计阅读时间:7分钟
Docker提供了一个用于与Docker守护进程进行交互的API(称为Docker Engine API),以及用于Go和Python的SDK。使用SDK,您可以快速轻松地构建和扩展Docker应用程序和解决方案。如果Go或Python不适用于您,则可以直接使用Docker Engine API。
Docker Engine API是一种RESTful API,可通过HTTP客户端(例如wget
或
curl
)或HTTP库(大多数现代编程语言的一部分)进行访问。
安装SDK
使用以下命令安装Go或Python SDK。这两个SDK可以安装并共存。
转到SDK
go get github.com/docker/docker/client
客户端需要Go的最新版本。运行go version
并确保您正在运行当前受支持的Go版本
Python SDK
-
推荐:跑
pip install docker
。 -
如果您不能使用
pip
:- 直接下载软件包。
- 解压缩它并转到解压缩的目录,
- 运行
python setup.py install
。
阅读完整的Docker Engine Python SDK参考。
查看API参考
您可以 查看该API的最新版本的参考 或选择特定版本。
版本化的API和SDK
您应使用的Docker Engine API的版本取决于Docker守护程序和Docker客户端的版本。有关详细信息,请参阅 API文档中的“版本化的API和SDK”部分。
SDK和API快速入门
使用以下准则来选择要在代码中使用的SDK或API版本:
- 如果您要开始一个新项目,请使用最新版本,但要使用API版本协商或指定要使用的版本。这有助于防止意外。
- 如果需要新功能,请更新代码以至少使用支持该功能的最低版本,并优先使用可以使用的最新版本。
- 否则,继续使用您的代码已使用的版本。
例如,docker run
可以直接使用Docker API或使用Python或Go SDK轻松实现该命令。
package main
import (
"context"
"io"
"os"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/client"
"github.com/docker/docker/pkg/stdcopy"
)
func main() {
ctx := context.Background()
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil {
panic(err)
}
reader, err := cli.ImagePull(ctx, "docker.io/library/alpine", types.ImagePullOptions{})
if err != nil {
panic(err)
}
io.Copy(os.Stdout, reader)
resp, err := cli.ContainerCreate(ctx, &container.Config{
Image: "alpine",
Cmd: []string{"echo", "hello world"},
}, nil, nil, nil, "")
if err != nil {
panic(err)
}
if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil {
panic(err)
}
statusCh, errCh := cli.ContainerWait(ctx, resp.ID, container.WaitConditionNotRunning)
select {
case err := <-errCh:
if err != nil {
panic(err)
}
case <-statusCh:
}
out, err := cli.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{ShowStdout: true})
if err != nil {
panic(err)
}
stdcopy.StdCopy(os.Stdout, os.Stderr, out)
}
import docker
client = docker.from_env()
print client.containers.run("alpine", ["echo", "hello", "world"])
$ curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \
-d '{"Image": "alpine", "Cmd": ["echo", "hello world"]}' \
-X POST http://localhost/v1.41/containers/create
{"Id":"1c6594faf5","Warnings":null}
$ curl --unix-socket /var/run/docker.sock -X POST http://localhost/v1.41/containers/1c6594faf5/start
$ curl --unix-socket /var/run/docker.sock -X POST http://localhost/v1.41/containers/1c6594faf5/wait
{"StatusCode":0}
$ curl --unix-socket /var/run/docker.sock "http://localhost/v1.41/containers/1c6594faf5/logs?stdout=1"
hello world
使用cURL通过Unix套接字进行连接时,主机名并不重要。上面的示例使用localhost
,但是任何主机名都可以使用。
使用的是cURL 7.47.0或更低版本?
上面的示例假定您使用的是cURL 7.50.0或更高版本。 使用套接字连接时,较旧的cURL版本使用非标准的URL表示法。
如果您使用的是旧版本的cURL,请
http:/<API version>/
改用,例如,http:/v1.41/containers/1c6594faf5/start
有关更多示例,请看一下SDK示例。
非官方图书馆
有许多社区支持的库可用于其他语言。它们尚未经过Docker的测试,因此,如果遇到任何问题,请将它们提交给库维护者。
语 | 图书馆 |
---|---|
C | libdocker的 |
C# | Docker.DotNet |
C ++ | lasote / docker_client |
Clojure | clj-docker-client |
镖 | bwu_docker |
埃尔朗 | erldocker |
摇篮 | gradle-docker-plugin |
Groovy | 码头客户 |
哈斯克尔 | 码头工人 |
HTML(Web组件) | 码头工人元素 |
爪哇 | 码头客户 |
爪哇 | 码头工人 |
爪哇 | docker-java-api |
爪哇 | 乔克 |
节点JS | dockerode |
节点JS | 港口船长 |
佩尔 | Eixo ::码头工人 |
的PHP | Docker-PHP |
红宝石 | 码头工人API |
锈 | 码头锈 |
锈 | 升船机 |
斯卡拉 | 拖船 |
斯卡拉 | 反应性码头工人 |
迅速 | 泊坞窗-客户端-Swift |