28.4 编程开发
由于Docker服务端提供了REST风格的API,通过对这些API进一步地封装,可以提供给各种开发语言作为Docker的使用库。
这里以docker-py项目为例,介绍在Python语言中对Docker相关资源进行的操作。
1.安装docker-py
- $ sudo
- $ sudo pip install docker-py
安装后可以发现,代码结构十分清晰,主要提供了Client类,用来封装提供用户可以用Docker命令执行的各种操作,包括build、run、commit、create_container、info等接口。
对REST接口的调用使用了request库。对于这些API,用户也可以通过curl来进行调用测试。
2.使用示例
打开Python的终端,首先创建一个Docker客户端连接:
- $ sudo python
- >>> import docker
- >>> c = docker.Client(base_url='unix://var/run/docker.sock',version='1.15',timeout=10)
通过info()方法查看Docker系统信息:
- >>> c.info()
- {u'KernelVersion': u'3.13.0-24-generic', u'NFd': 19, u'MemoryLimit': 1, u'InitSha1':
- u'', u'SwapLimit': 0, u'Driver': u'aufs', u'IndexServerAddress': u'https://
- index.docker.io/v1/', u'NGoroutines': 27, u'Images': 200, u'InitPath':
- u'/usr/bin/docker', u'Containers': 2, u'ExecutionDriver': u'native-0.2',
- u'Debug': 0, u'NEventsListener': 0, u'DriverStatus': [[u'Root Dir', u'/var
- /lib/docker/aufs'], [u'Dirs', u'204']], u'OperatingSystem': u'Ubuntu 14.04.1
- LTS', u'IPv4Forwarding': 1}
通过images()和containers()方法可以查看本地的镜像和容器的列表:
- >>> c.images()
- [{u'Created': 1414108439, u'VirtualSize': 199257566, u'ParentId':
- u'22093c35d77bb609b9257ffb2640845ec05018e3d96cb939f68d0e19127f1723',
- u'RepoTags': [u'ubuntu:latest'], u'Id': u'5506de2b643be1e6febbf3b8a240760
- c6843244c41e12aa2f60ccbb7153d17f5', u'Size': 0}]
- >>> c.containers()
- [{u'Status': u'Up 5 seconds', u'Created': 1415086513, u'Image': u'ubuntu:latest',
- u'Ports': [], u'Command': u'/bin/bash', u'Names': [u'/romantic_blackwell'],
- u'Id': u'f51f2e4cc6df8829baa00018fe3a9e5112cc4d0786cc674d621e51ab795c9fd6'}]
通过create_container()方法来创建一个容器,之后启动它:
- >>> container = c.create_container(image='ubuntu:latest', command='bash')
- >>> print(container)
- {u'Id': u'a8439e4c8e64a94a287d408fdc3ff9a0b4a8577fe3b5e32975b790afb41414af',
- u'Warnings': None}
- >>> c.start(container='a8439e4c8e64a94a287d408fdc3ff9a0b4a8577fe3b5e32975b790afb41414af')
可见,所提供的方法与Docker提供的命令都十分类似。实际上,在执行Docker命令的时候,也是通过Docker提供的客户端进行了封装,并向服务端发起API请求。
