Python操纵Docker Remote API实现自动化

Docker提供了Remote API,能够经过REST接口进行Docker服务的控制,包括pull/push等全部操做,结果与本机的操做彻底同样。使用Docker Remote API能够经过脚本进行Docker集群的自动化控制。前端

一、启用Docker Remote API

加入Docker的启动选项:docker

DOCKER_OPTS="-H=unix:///var/run/docker.sock -H=0.0.0.0:2375"

“-H=0.0.0.0:2375” 表示在任何IP的2375端口上监听,提供服务。json

这个选项的设置在Ubuntu上15.04版本后有一些不一样,主要是服务的启动方式变为了systemd。vim

Ubuntu 15.04(含)之后版本

修改/usr/lib/systemd/system/docker.service文件,使docker支持远程tcp接口和本地SOCK链接。安全

vim /usr/lib/systemd/system/docker.service

将ExecStart修改成:app

ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

按esc+:+wq保存,退出。负载均衡

从新载入systemd,扫描新的或有变更的单元:tcp

systemctl daemon-reload

重启docker服务加密

systemctl stop docker.service
systemctl start docker.service

Ubuntu 15.04(不含)之前版本

在Ubuntu环境下修改其配置文件 /etc/default/docker, 加入:url

DOCKER_OPTS="-H=unix:///var/run/docker.sock -H=0.0.0.0: 2375"

启动服务:

sudo service docker restart
  • 注意,上面的方法只适合局域网使用,在Internet下应配置相应的加密、安全措施,并在前端部署负载均衡和防火墙设备。

二、链接到Docker本地服务

首先安装Docker Remote API的Python客户端:

pip install docker-py

而后在docker的同一台机器,能够链接和查看docker的容器信息。

from docker import Client

cli = Client(base_url='tcp://127.0.0.1:2375')
print( len(cli.containers()) )
print(cli.containers())
  • 在未启用Remote API的状况下,能够进行本地链接:
cli = Client(base_url='unix://var/run/docker.sock')

三、链接到Docker远程服务

能够在远程进行访问docker 服务:

from docker import Client

cli = Client(base_url='tcp://192.168.199.120:2375')
len(cli.containers())
  • 上面的 "192.168.199.120:2375"是docker服务所在的IP地址和端口。

四、操纵Docker服务实例

经过上面的 cli = Client(base_url='tcp://192.168.199.120:2375')能够执行全部的Docker命令行操做。

4.1 docker images

from docker import Client

cli = Client(base_url='tcp://192.168.199.120:2375')
print( len(cli.images()) )

# 打印出容器镜像的参数
for img in cli.images():
    print(img['RepoTags'][0])

4.2 docker containers

from docker import Client

cli = Client(base_url='tcp://192.168.199.120:2375')
print( len(cli.containers()) )

# 打印出容器的参数
for c in cli.containers():
    print(c["Command"],'\t',c["Image"],'\t',c["Names"])

4.3 docker pull

from docker import Client

cli = Client(base_url='tcp://127.0.0.1:2375')
for line in cli.pull('busybox', stream=True):
     print(json.dumps(json.loads(line), indent=4))

4.4 docker push

from docker import Client

cli = Client(base_url='tcp://127.0.0.1:2375')
response = [line for line in cli.push('yourname/app', stream=True)]
response
相关文章
相关标签/搜索