使用 Docker Engine SDK 进行开发
Docker 提供了一个 API,用于与 Docker 守护程序(称为 Docker Engine API 的 API 以及 Go 和 Python 的 SDK。SDK 允许您高效地构建和 扩展 Docker 应用程序和解决方案。如果 Go 或 Python 不起作用 您可以直接使用 Docker Engine API。
Docker 引擎 API 是由 HTTP 客户端(如 or )或 HTTP 库(大多数现代编程语言的一部分)访问的 RESTful API。wget
curl
安装 SDK
使用以下命令安装 Go 或 Python SDK。这两个 SDK 都可以 安装并共存。
Go 软件开发工具包
$ go get github.com/docker/docker/client
客户端需要最新版本的 Go。运行并确保您运行的是当前支持的 Go 版本。go version
有关更多信息,请参阅 Docker Engine Go SDK 参考。
Python 开发工具包
建议:运行 .
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 快速入门
使用以下准则选择要在 法典:
- 如果要启动新项目,请使用最新版本 但请使用 API 版本协商或指定您正在使用的版本。这 有助于防止意外。
- 如果您需要新功能,请更新您的代码以至少使用最低版本 ,并首选您可以使用的最新版本。
- 否则,请继续使用代码已在使用的版本。
例如,可以使用
Docker API,或使用 Python 或 Go SDK。docker run
package main
import (
"context"
"io"
"os"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/image"
"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)
}
defer cli.Close()
reader, err := cli.ImagePull(ctx, "docker.io/library/alpine", image.PullOptions{})
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, container.StartOptions{}); 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, container.LogsOptions{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.47/containers/create
{"Id":"1c6594faf5","Warnings":null}
$ curl --unix-socket /var/run/docker.sock -X POST http://localhost/v1.47/containers/1c6594faf5/start
$ curl --unix-socket /var/run/docker.sock -X POST http://localhost/v1.47/containers/1c6594faf5/wait
{"StatusCode":0}
$ curl --unix-socket /var/run/docker.sock "http://localhost/v1.47/containers/1c6594faf5/logs?stdout=1"
hello world
使用 cURL 通过 Unix 套接字进行连接时,主机名并不重要。上一个
示例使用 ,但任何主机名都可以使用。localhost
重要
前面的示例假定您使用的是 cURL 7.50.0 或更高版本。旧版本 cURL 在使用套接字连接时使用非标准 URL 表示法。
如果您使用的是旧版本的 cURL,请改用 例如:。
http:/<API version>/
http:/v1.47/containers/1c6594faf5/start
有关更多示例,请查看 SDK 示例。
非官方库
有许多社区支持的库可用于其他 语言。它们尚未经过 Docker 的测试,因此如果您遇到任何问题, 将它们提交给库维护者。
语言 | 图书馆 |
---|---|
C | libdocker |
C# | Docker.DotNet |
C++ | 拉索特/docker_client |
Clojure | clj-docker-客户端 |
Clojure | Contajners |
飞镖 | bwu_docker |
Erlang | erldocker |
格拉德尔 | gradle-docker-插件 |
槽的 | docker-client 客户端 |
哈斯克尔 | docker-hs |
爪哇岛 | docker-client 客户端 |
爪哇岛 | docker-java |
爪哇岛 | docker-java-api |
爪哇岛 | 小丑 |
NodeJS 的 | Dockerode 浏览器 |
NodeJS 的 | 港务长 |
NodeJS 的 | 白鲸效应 |
Perl 公司 | Eixo::D ocker |
菲律宾 | Docker -PHP |
红宝石 | docker-api |
锈 | 系船柱 |
锈 | docker-rust 的 |
锈 | 升船机 |
斯卡拉 | 拖船 |
斯卡拉 | 反应式 docker |
迅速 | docker-client-swift |