217 lines
8.5 KiB
Markdown
217 lines
8.5 KiB
Markdown
---
|
|
title: Develop with Docker Engine SDKs
|
|
description: Using Docker SDKs to automate Docker tasks in your language of choice
|
|
keywords: developing, sdk
|
|
redirect_from:
|
|
- /engine/api/sdks/
|
|
- /develop/sdk/
|
|
---
|
|
|
|
Docker provides an API for interacting with the Docker daemon (called the Docker
|
|
Engine API), as well as SDKs for Go and Python. The SDKs allow you to build and
|
|
scale Docker apps and solutions quickly and easily. If Go or Python don't work
|
|
for you, you can use the Docker Engine API directly.
|
|
|
|
The Docker Engine API is a RESTful API accessed by an HTTP client such as `wget` or
|
|
`curl`, or the HTTP library which is part of most modern programming languages.
|
|
|
|
## Install the SDKs
|
|
|
|
Use the following commands to install the Go or Python SDK. Both SDKs can be
|
|
installed and coexist together.
|
|
|
|
### Go SDK
|
|
|
|
```bash
|
|
go get github.com/docker/docker/client
|
|
```
|
|
|
|
The client requires a recent version of Go. Run `go version` and ensure that you
|
|
are running a currently supported version of Go
|
|
|
|
|
|
[Read the full Docker Engine Go SDK reference](https://godoc.org/github.com/docker/docker/client).
|
|
|
|
### Python SDK
|
|
|
|
- **Recommended**: Run `pip install docker`.
|
|
|
|
- **If you can't use `pip`**:
|
|
|
|
1. [Download the package directly](https://pypi.python.org/pypi/docker/).
|
|
2. Extract it and change to the extracted directory,
|
|
3. Run `python setup.py install`.
|
|
|
|
[Read the full Docker Engine Python SDK reference](https://docker-py.readthedocs.io/).
|
|
|
|
## View the API reference
|
|
|
|
You can
|
|
[view the reference for the latest version of the API](/engine/api/latest/)
|
|
or [choose a specific version](/engine/api/version-history/).
|
|
|
|
## Versioned API and SDK
|
|
|
|
The version of the Docker Engine API you should use depends upon the version of
|
|
your Docker daemon and Docker client. Refer to the [versioned API and SDK](/engine/api/#versioned-api-and-sdk)
|
|
section in the API documentation for details.
|
|
|
|
## SDK and API quickstart
|
|
|
|
Use the following guidelines to choose the SDK or API version to use in your
|
|
code:
|
|
|
|
- If you're starting a new project, use the [latest version](/engine/api/latest/),
|
|
but use API version negotiation or specify the version you are using. This
|
|
helps prevent surprises.
|
|
- If you need a new feature, update your code to use at least the minimum version
|
|
that supports the feature, and prefer the latest version you can use.
|
|
- Otherwise, continue to use the version that your code is already using.
|
|
|
|
As an example, the `docker run` command can be easily implemented using the
|
|
Docker API directly, or using the Python or Go SDK.
|
|
|
|
<ul class="nav nav-tabs">
|
|
<li class="active"><a data-toggle="tab" data-target="#go">Go</a></li>
|
|
<li><a data-toggle="tab" data-target="#python">Python</a></li>
|
|
<li><a data-toggle="tab" data-target="#curl">HTTP</a></li>
|
|
</ul>
|
|
<div class="tab-content">
|
|
|
|
<div id="go" class="tab-pane fade in active" markdown="1">
|
|
|
|
```go
|
|
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, "")
|
|
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)
|
|
}
|
|
```
|
|
|
|
</div>
|
|
<div id="python" class="tab-pane fade" markdown="1">
|
|
|
|
```python
|
|
import docker
|
|
client = docker.from_env()
|
|
print client.containers.run("alpine", ["echo", "hello", "world"])
|
|
```
|
|
|
|
</div>
|
|
<div id="curl" class="tab-pane fade" markdown="1">
|
|
|
|
```bash
|
|
$ curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \
|
|
-d '{"Image": "alpine", "Cmd": ["echo", "hello world"]}' \
|
|
-X POST http://localhost/v{{ site.latest_engine_api_version}}/containers/create
|
|
{"Id":"1c6594faf5","Warnings":null}
|
|
|
|
$ curl --unix-socket /var/run/docker.sock -X POST http://localhost/v{{ site.latest_engine_api_version}}/containers/1c6594faf5/start
|
|
|
|
$ curl --unix-socket /var/run/docker.sock -X POST http://localhost/v{{ site.latest_engine_api_version}}/containers/1c6594faf5/wait
|
|
{"StatusCode":0}
|
|
|
|
$ curl --unix-socket /var/run/docker.sock "http://localhost/v{{ site.latest_engine_api_version}}/containers/1c6594faf5/logs?stdout=1"
|
|
hello world
|
|
```
|
|
|
|
When using cURL to connect over a unix socket, the hostname is not important. The
|
|
examples above use `localhost`, but any hostname would work.
|
|
|
|
> **Using cURL 7.47.0 or below?**
|
|
>
|
|
> The examples above assume you are using cURL 7.50.0 or above. Older versions of
|
|
> cURL used a [non-standard URL notation](https://github.com/moby/moby/issues/17960){:target="_blank" rel="noopener" class="_"}
|
|
> when using a socket connection.
|
|
>
|
|
> If you are using an older version of cURL, use `http:/<API version>/` instead,
|
|
> for example, `http:/v{{ site.latest_engine_api_version}}/containers/1c6594faf5/start`
|
|
{: .important}
|
|
|
|
</div>
|
|
</div>
|
|
|
|
For more examples, take a look at the [SDK examples](examples.md).
|
|
|
|
## Unofficial libraries
|
|
|
|
There are a number of community supported libraries available for other
|
|
languages. They have not been tested by Docker, so if you run into any issues,
|
|
file them with the library maintainers.
|
|
|
|
| Language | Library |
|
|
|:----------------------|:----------------------------------------------------------------------------|
|
|
| C | [libdocker](https://github.com/danielsuo/libdocker) |
|
|
| C# | [Docker.DotNet](https://github.com/ahmetalpbalkan/Docker.DotNet) |
|
|
| C++ | [lasote/docker_client](https://github.com/lasote/docker_client) |
|
|
| Clojure | [clj-docker-client](https://github.com/into-docker/clj-docker-client) |
|
|
| Dart | [bwu_docker](https://github.com/bwu-dart/bwu_docker) |
|
|
| Erlang | [erldocker](https://github.com/proger/erldocker) |
|
|
| Gradle | [gradle-docker-plugin](https://github.com/gesellix/gradle-docker-plugin) |
|
|
| Groovy | [docker-client](https://github.com/gesellix/docker-client) |
|
|
| Haskell | [docker-hs](https://github.com/denibertovic/docker-hs) |
|
|
| HTML (Web Components) | [docker-elements](https://github.com/kapalhq/docker-elements) |
|
|
| Java | [docker-client](https://github.com/spotify/docker-client) |
|
|
| Java | [docker-java](https://github.com/docker-java/docker-java) |
|
|
| Java | [docker-java-api](https://github.com/amihaiemil/docker-java-api) |
|
|
| Java | [jocker](https://github.com/ndeloof/jocker) |
|
|
| NodeJS | [dockerode](https://github.com/apocas/dockerode) |
|
|
| NodeJS | [harbor-master](https://github.com/arhea/harbor-master) |
|
|
| Perl | [Eixo::Docker](https://github.com/alambike/eixo-docker) |
|
|
| PHP | [Docker-PHP](https://github.com/docker-php/docker-php) |
|
|
| Ruby | [docker-api](https://github.com/swipely/docker-api) |
|
|
| Rust | [docker-rust](https://github.com/abh1nav/docker-rust) |
|
|
| Rust | [shiplift](https://github.com/softprops/shiplift) |
|
|
| Scala | [tugboat](https://github.com/softprops/tugboat) |
|
|
| Scala | [reactive-docker](https://github.com/almoehi/reactive-docker) |
|
|
| Swift | [docker-client-swift](https://github.com/valeriomazzeo/docker-client-swift) |
|