使用docker/engine-api操作docker
最后更新于:2022-04-01 21:48:34
## docker/engine-api项目简介
docker/engine-api项目是从docker engine项目独立出来的子项目,它的代码主要抽取于docker engine项目的command line(命令行)的操作的部分.所以他可以完成通过命令行完成的功能.
#### 作用
* 有了这个项目,就可以摆脱命令行的方式来操作docker engine.使用http的方式与各个节点的docker engine进行沟通.甚至可以用它来自己来开发一个docker的图形界面化的管理系统.
* docker为我们提供了一个远程操作docker服务的api[《Docker Remote API》](https://docs.docker.com/engine/reference/api/docker_remote_api/).但是使用这种方式有一个缺点就是你必须自己封装http请求,自己根据json格式来定义相关的数据结构.docker/engine-api项目其实就是帮助我们解决了这样繁琐的工作.
* docker/engine-api项目可以实现远程操作docker engine服务
* 采用golang开发,原生兼容docker
* 项目开源:github地址:https://github.com/docker/engine-api
## docker/engine-api使用方式
### 1.项目下载与安装
如果你的golang开发中用到docker/engine-api项目.需要做如下的包引入操作
```
go get github.com/docker/engine-api
cd $GOPATH/src/github.com/docker/engine-api && make deps
```
第一个命令引入engine-api项目,第二个命令引入项目依赖
### 2.操作本地docker engine
```
//获取client
defaultHeaders := map[string]string{"User-Agent": "engine-api-cli-1.0"}
cli, err := client.NewClient("unix:///var/run/docker.sock", "v1.22", nil, defaultHeaders)
if err != nil {
panic(err)
}
//获取本机所有的容器
options := types.ContainerListOptions{All: true}
containers, err := cli.ContainerList(context.Background(), options)
if err != nil {
panic(err)
}
//打印容器id
for _, c := range containers {
fmt.Println(c.ID)
}
```
### 3.操作远程主机docker engine
```
defaultHeaders := map[string]string{"User-Agent": "engine-api-cli-1.0"}
cli, err := client.NewClient("tcp://192.168.1.158:2375", "v1.22", nil, defaultHeaders)
```
**注意:第一个参数tcp://192.168.1.158:2375**
';