Docker Engine SDKs and API 的开发1
Develop with Docker Engine SDKs and API
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
go get github.com/docker/docker/client
Read the full Docker Engine Go SDK reference.
Python SDK
Recommended: Run
pip install docker.If you can’t use
pip:- Download the package directly.
- Extract it and change to the extracted directory,
- Run
python setup.py install.
Read the full Docker Engine Python SDK reference.
View the API reference
You can view the reference for the latest version of the API or choose a specific version.
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.
A given version of the Docker Engine SDK supports a specific version of the Docker Engine API, as well as all earlier versions. If breaking changes occur, they are documented prominently.
Daemon and client API mismatches
The Docker daemon and client do not necessarily need to be the same version at all times. However, keep the following in mind.
If the daemon is newer than the client, the client does not know about new features or deprecated API endpoints in the daemon.
If the client is newer than the daemon, the client can request API endpoints that the daemon does not know about.
A new version of the API is released when new features are added.
The Docker API is backward-compatible, so you do not need to update code that uses the API unless you need to take advantage of new features.
To see the highest version of the API your Docker daemon and client support, use 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
You can specify the API version to use, in one of the following ways:
When using the SDK, use the latest version you can, but at least the version that incorporates the API version with the features you need.
When using
curldirectly, specify the version as the first part of the URL. For instance, if the endpoint is/containers/, you can use/v1.27/containers/.To force the Docker CLI or the Docker Engine SDKs to use an old version version of the API than the version reported by
docker version, set the environment variableDOCKER_API_VERSIONto the correct version. This works on Linux, Windows, or macOS clients.DOCKER_API_VERSION='1.27'
While the environment variable is set, that version of the API is used, even if the Docker daemon supports a newer version.
For the SDKs, you can also specify the API version programmatically, as a parameter to the
clientobject. See the Go constructor or the Python SDK documentation forclient.
Docker EE and CE API mismatch
If you use Docker EE in production, we recommend using Docker EE in development too.
If you can’t, such as when your developers use Docker for Mac or Docker for Windows and manually build and push images, then your developers need to configure their Docker clients to use the same version of the API reported by their Docker daemon. This prevents the developer from using a feature that is not yet supported on the daemon where the workload runs in production. You can do this one of two ways:
- Configure the Docker client to connect to an external daemon running Docker EE. You can use the
-Hflag on thedockercommand or set theDOCKER_HOSTenvironment variable. The client uses the daemon’s latest supported API version. - Configure the Docker client to use a specific API by setting the
DOCKER_API_VERSIONenvironment variable to the API version to use, such as1.30.
API version matrix
Docker does not recommend running versions prior to 1.12, which means you are encouraged to use an API version of 1.24 or higher.
| Docker version | Maximum API version | Change log |
|---|---|---|
| 18.05 | 1.37 | changes |
| 18.04 | 1.37 | changes |
| 18.03 | 1.37 | changes |
| 18.02 | 1.36 | changes |
| 17.12 | 1.35 | changes |
| 17.11 | 1.34 | changes |
| 17.10 | 1.33 | changes |
| 17.09 | 1.32 | changes |
| 17.07 | 1.31 | changes |
| 17.06 | 1.30 | changes |
| 17.05 | 1.29 | changes |
| 17.04 | 1.28 | changes |
| 17.03.1 | 1.27 | changes |
| 17.03 | 1.26 | changes |
| 1.13.1 | 1.26 | changes |
| 1.13 | 1.25 | changes |
| 1.12 | 1.24 | changes |
| 1.11 | 1.23 | changes |
| 1.10 | 1.22 | changes |
| 1.9 | 1.21 | changes |
| 1.8 | 1.20 | changes |
| 1.7 | 1.19 | changes |
| 1.6 | 1.18 | changes |
Choose the SDK or API version to use
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, but do 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.
SDK and API quickstart
As an example, the docker run command can be easily implemented using the Docker API directly, or using the Python or Go SDK.
Go:
package main import (
"io"
"os" "github.com/docker/docker/client"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/pkg/stdcopy" "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)
} 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"])
HTTP:
$ 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
For more examples, take a look at the getting started guide.
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 |
| C# | Docker.DotNet |
| C++ | lasote/docker_client |
| Dart | bwu_docker |
| Erlang | erldocker |
| Gradle | gradle-docker-plugin |
| Groovy | docker-client |
| Haskell | docker-hs |
| HTML (Web Components) | docker-elements |
| Java | docker-client |
| Java | docker-java |
| Java | docker-java-api |
| NodeJS | dockerode |
| NodeJS | harbor-master |
| Perl | Eixo::Docker |
| PHP | Docker-PHP |
| Ruby | docker-api |
| Rust | docker-rust |
| Rust | shiplift |
| Scala | tugboat |
| Scala | reactive-docker |
| Swift | docker-client-swift |
Docker Engine SDKs and API 的开发1的更多相关文章
- Docker Engine SDKs and API 的开发2
Examples using the Docker Engine SDKs and Docker API After you install Docker, you can install the G ...
- API接口开发 配置、实现、测试
Yii2 基于RESTful架构的 advanced版API接口开发 配置.实现.测试 环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到 ...
- Docker Machine 和 Docker Engine 的区别
Docker Engine 当人们提到 Docker,一般而言,大家说的是 Docker Engine,如下图: 它是一个 client-server application. Docker Eng ...
- Install Docker Engine on CentOS 在CentOS 7 上安装Docker
Install Docker Engine on CentOS OS Requirements 系统要求 To install Docker Engine,you need a maintained ...
- 在Ubuntu上安装Docker Engine
在Ubuntu上安装Docker Engine 这篇文章是介绍如何在在Ubuntu上安装Docker Engine,就是Google翻译官方文档的版本,英语好的直接官方原文.原文 要在Ubuntu上开 ...
- 启动docker报错Failed to listen on Docker Socket for the API.
1.启动时报错查看日志发现 # journalctl -xe Failed to listen on Docker Socket for the API. 查找socket这个配置文件,修改如下 # ...
- Google Map API V3开发(1)
Google Map API V3开发(1) Google Map API V3开发(2) Google Map API V3开发(3) Google Map API V3开发(4) Google M ...
- Google Map API V3开发(2)
Google Map API V3开发(1) Google Map API V3开发(2) Google Map API V3开发(3) Google Map API V3开发(4) Google M ...
- Google Map API V3开发(3)
Google Map API V3开发(1) Google Map API V3开发(2) Google Map API V3开发(3) Google Map API V3开发(4) Google M ...
随机推荐
- 解决caffe绘制训练过程的loss和accuracy曲线时候报错:paste: aux4.txt: 没有那个文件或目录 rm: 无法删除"aux4.txt": 没有那个文件或目录
我用的是faster-rcnn,在绘制训练过程的loss和accuracy曲线时候,抛出如下错误,在网上查找无数大牛博客后无果,自己稍微看了下代码,发现,extract_seconds.py文件的 g ...
- python之小数据池
代码块 Python 程序 是由代码块构造的.块是一个python程序的文本,它是作为一个执行单元的. 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而作为交互方式输入的每个命令都是 ...
- android使用inject需要注意的地方
android使用inject需要注意的地方1.viewmodel里面添加注解@Inject FavoritesDBManager mFavoritesDBManager; 2.Component里面 ...
- Android开源图表图形库K线图
Android开源图表图形库K线图 web端k线图一般使用TradingView,android原生的一般是在MPAndroidChart 基础上做开发的,目前看到一个比较好的K线开源组件是KChar ...
- SpringBoot整合redis哨兵主从服务
前提环境: 主从配置 http://www.cnblogs.com/zwcry/p/9046207.html 哨兵配置 https://www.cnblogs.com/zwcry/p/9134721. ...
- 专题8:javascript函数详解
函数是一段可以反复调用的代码块.函数还能接受输入的参数,不同的参数会返回不同的值. 函数的声明 JavaScript 有三种声明函数的方法. (1)function 命令 function命令声明的代 ...
- <转>jmeter(十)参数化
本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...
- <转>jmeter(六)元件的作用域与执行顺序
本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...
- MySQL性能测试工具sysbench的安装和使用
sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL.Oracle和PostgreSQL.当前 ...
- NFS服务端与客户端配置
#首先确认系统中是否安装了对于的软件 rpm -qa|grep -i nfs #在有网络的情况下使用YUM安装NFS.rpcbind软件包 yum install lrzsz nmap tree do ...