专栏首页菲宇docker-py 用Python调用Docker接口

docker-py 用Python调用Docker接口

官方文档:【https://docker-py.readthedocs.io/en/stable/images.html】

  众所周知,Docker向外界提供了一个API来管理其中的资源。这个API可以是socket文件形式的(一般也是默认的,在/var/run/docker.sock中),也可以是TCP形式的。以前想要通过编程的方法来调用这些API还是傻傻的用subprocess等和系统层面交互的模块来调用,而docker-py这个模块则是直接把DockerAPI的调用封装了进去,让我们可以更加贴合Docker地进行API调用。

  安装还是用pip:

  pip install docker-py,意外的,这个模块所需要的依赖特别多,等了比我预想更长的时间,装好了。在python中import docker,不报错就是装好了。

  ■  简单使用

  网上的部分教程和使用方法说明可能是因为版本不切合的原因,不奏效。从中筛选了一些奏效的代码。首先是一个最简单的应用,就是实例化出一个dockerapi调用者的实例:

import docker

client = docker.Client(base_url='unix:///var/run/docker.sock')

for component,version in client.version().iteritems():
    print component,version

  初始化实例的过程中用到了参数base_url,它可以指出一个socket文件或者响应的dockerTCP连接如tcp://127.0.0.1:2375这样子。除此之外,还有version参数可以指出docker的版本,timeout参数指出连接超时的时间,tls参数可以置True或False来指出当前连接是否需要用到SSL证书,另外也可以传递一个docker.tls.TLSConfig类的实例来实现指定的TLS配置。

  得到的客户端实例client可以调用一些方法。比如version方法是将当前docker以及其所依赖的环境中各个组件的版本信息以一个字典的方式展现出来。上述在虚拟机中输出如下:

KernelVersion 3.10.0-693.5.2.el7.x86_64
PkgVersion docker-1.12.6-71.git3e8e77d.el7.centos.1.x86_64
Os linux
BuildTime 2018-01-30T09:17:00.069703428+00:00
ApiVersion 1.24
Version 1.12.6
GitCommit 3e8e77d/1.12.6
Arch amd64
GoVersion go1.8.3

  其他的读取当前docker环境中的一些方法如:

  client.images([name])  获取镜像信息,name可以是一个镜像的name,name的一部分,name:tag等多种形式,获取到完整的镜像信息。不指定name时返回所有镜像信息

  client.containers([name])  获取容器信息,name可以是容器的name, id等等,返回

  client.info()  docker info命令的那些输出

  client.start/stop(name)  相当于docker start和stop制定容器

  ...

  上述几个方法的输出都是标准的JSON格式,可以很方便地被嵌入到其他的一些系统中

  client.login()  可以传入实名参数username, password, registry等,相当于docker login 

  这里还有很多方法可以说,正巧这回想正式用下ipython这个神器。yum install ipython之后(还挺大的。。),键入ipython就进入ipython的shell了。在实例化玩client之后,输入client.然后按tab键要求补全的话,就会显示出所有client实例可以调用的方法和属性。

  对于一个方法比如client.delete,后面输入问号再按回车,就可以看到这个方法相关的一些说明和用法。比去网上查,看官方文档不知道高到哪里去了。

  列个所有方法的表,偷懒不详写了。

cli.adapters                           cli.headers                            cli.proxies
cli.api_version                        cli.history                            cli.pull
cli.attach                             cli.hooks                              cli.push
cli.attach_socket                      cli.images                             cli.put
cli.auth                               cli.import_image                       cli.put_archive
cli.base_url                           cli.import_image_from_data             cli.rebuild_auth
cli.build                              cli.import_image_from_file             cli.rebuild_method
cli.cert                               cli.import_image_from_image            cli.rebuild_proxies
cli.close                              cli.import_image_from_stream           cli.remove_container
cli.commit                             cli.import_image_from_url              cli.remove_image
cli.connect_container_to_network       cli.info                               cli.remove_network
cli.containers                         cli.init_swarm                         cli.remove_service
cli.cookies                            cli.insert                             cli.remove_volume
cli.copy                               cli.inspect_container                  cli.rename
cli.create_container                   cli.inspect_image                      cli.request
cli.create_container_config            cli.inspect_network                    cli.resize
cli.create_container_from_config       cli.inspect_node                       cli.resolve_redirects
cli.create_endpoint_config             cli.inspect_service                    cli.restart
cli.create_host_config                 cli.inspect_swarm                      cli.search
cli.create_network                     cli.inspect_task                       cli.send
cli.create_networking_config           cli.inspect_volume                     cli.services
cli.create_service                     cli.join_swarm                         cli.start
cli.create_swarm_spec                  cli.kill                               cli.stats
cli.create_volume                      cli.leave_swarm                        cli.stop
cli.delete                             cli.load_image                         cli.stream
cli.diff                               cli.login                              cli.tag
cli.disconnect_container_from_network  cli.logs                               cli.tasks
cli.events                             cli.max_redirects                      cli.timeout
cli.exec_create                        cli.merge_environment_settings         cli.top
cli.exec_inspect                       cli.mount                              cli.trust_env
cli.exec_resize                        cli.networks                           cli.unpause
cli.exec_start                         cli.nodes                              cli.update_container
cli.export                             cli.options                            cli.update_service
cli.from_env                           cli.params                             cli.update_swarm
cli.get                                cli.patch                              cli.verify
cli.get_adapter                        cli.pause                              cli.version
cli.get_archive                        cli.ping                               cli.volumes
cli.get_image                          cli.port                               cli.wait
cli.get_redirect_target                cli.post                               
cli.head                               cli.prepare_request         

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kubernetes-配置字典ConfigMap

    很多生产环境中的应用程序配置较为复杂,可能需要多个config文件、命令行参数和环境变量的组合。使用容器部署时,把配置应该从应用程序镜像中解耦出来,以保证镜像的...

    菲宇
  • python处理xml

    XML格式类型是节点嵌套节点,对于每一个节点均有以下功能,以便对当前节点进行操作:

    菲宇
  • minikube本地部署运行 kubernetes 实例

    本次演示环境,我是在本机 MAC OS 以及虚拟机 Linux Centos7 上操作,以下是安装的软件及版本:

    菲宇
  • Go 每日一库之 cli

    cli是一个用于构建命令行程序的库。我们之前也介绍过一个用于构建命令行程序的库cobra。在功能上来说两者差不多,cobra的优势是提供了一个脚手架,方便开发。...

    用户7731323
  • gocron源码阅读-通过第三方cli包实现命令行参数获取和管理

    gocron源码中使用的是下面这个第三方包来实现的,下面就单独的拿出来测试以下效果,和官方flag包差不多

    陶士涵
  • 微信小程序的自动化测试框架

    官方地址如下:https://git.weixin.qq.com/minitest/minium-doc/tree/master

    Criss@陈磊
  • 微信小程序的自动化测试框架

    官方地址如下:https://git.weixin.qq.com/minitest/minium-doc/tree/master

    Criss@陈磊
  • 记录解决一个项目中遇到的maven打包问题

    拿到同时给的代码,进行打jar包,这个jar包依赖一个第三方的jar包,一开始用IDEA打出来的包,没有把依赖的包打进去,后来查了相关的资料,

    小勇DW3
  • 看完让你彻底搞懂Websocket原理

    杭州前端工程师
  • 171.Spring Boot WebSocket:原理篇

    【视频&交流平台】 àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=10...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券