使用python的docker-py实现docker的api操作

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介:

前沿:

        听同事说,以后的dba申请可能有部分走其他部门的docker ,那边貌似在搞一个类似docker的平台管理系统,据说很霸道。于是乎,我自己也想尝试写一个简单的doker管理平台。  做为起步我先搞搞docker api,docker官网有个docker-py,用起来很是清爽简单。 



有关docker的更多的文章,大家可以到我的独立博客看看。    xiaorui.cc




首先安装docker的python相关的模块。


1
2
3
4
5
6
7
8
9
10
root@dev-ops:~ # pip install docker-py
Requirement already satisfied (use --upgrade to upgrade): docker-py  in  /usr/local/lib/python2 .7 /dist-packages
Requirement already satisfied (use --upgrade to upgrade): requests==2.2.1  in  /usr/lib/python2 .7 /dist-packages  (from docker-py)
Requirement already satisfied (use --upgrade to upgrade): six>=1.3.0  in  /usr/lib/python2 .7 /dist-packages  (from docker-py)
Requirement already satisfied (use --upgrade to upgrade): websocket-client==0.11.0  in  /usr/local/lib/python2 .7 /dist-packages  (from docker-py)
Requirement already satisfied (use --upgrade to upgrade): mock==1.0.1  in  /usr/local/lib/python2 .7 /dist-packages  (from docker-py)
Requirement already satisfied (use --upgrade to upgrade): coverage==3.7.1  in  /usr/local/lib/python2 .7 /dist-packages  (from docker-py)
Cleaning up...
root@dev-ops:~
root@dev-ops:~ #


咱们先查看下已经下载好的模块


[root@dev-ops ~]$docker images

1
2
3
4
5
6
7
8
9
10
http: //rfyiamcool .blog.51cto.com /1030776/1539500
REPOSITORY               TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu_redis             latest              57672d1b5979        About an hour ago   257.6 MB
rastasheep /ubuntu-sshd    14.04               636d86f228c7        2 days ago          254.9 MB
rastasheep /ubuntu-sshd    12.04               1147568d245b        6 days ago          144.6 MB
rastasheep /ubuntu-sshd    13.10               8a63145eed52        6 days ago          231.6 MB
rastasheep /ubuntu-sshd    latest              47386e322f5d        8 days ago          254.9 MB
lemonbar /centos6-ssh      latest              b78c71c001db        11 days ago         296.9 MB
rastasheep /ubuntu-sshd    12.10               c9c48c3cb34c        4 weeks ago         188.9 MB
rastasheep /ubuntu-sshd    13.04               bf49ae3d5534        4 weeks ago         213.1 MB

wKiom1Pq-dvxth9MAAK2XDrkoH0863.jpg


查看已经启动的容器

[root@dev-ops ~]$docker ps -a

1
2
3
CONTAINER ID        IMAGE                           COMMAND             CREATED             STATUS              PORTS                   NAMES
c5f6d0240531        ubuntu_redis:latest              /usr/sbin/sshd  -D   About an hour ago   Up About an hour    0.0.0.0:49154->22 /tcp    redis_sshd          
df7b7568fa7a        rastasheep /ubuntu-sshd :latest    /usr/sbin/sshd  -D   About an hour ago   Up About an hour    0.0.0.0:49153->22 /tcp    test_sshd

  

wKiom1Pq-iyjKFhgAAJNPUnBE_w836.jpg


查看 docker 相关的版本

原文: http://rfyiamcool.blog.51cto.com/1030776/1539500


[root@dev-ops ~]$docker version

1
2
3
4
5
6
7
8
Client version: 0.9.1
Go version (client): go1.2.1
Git commit (client): 3600720
Server version: 0.9.1
Git commit (server): 3600720
Go version (server): go1.2.1
Last stable version: 1.1.2, please update docker
[root@dev-ops ~]$


好了,到现在为止 docker image有了,容器也有了,docker-py这个api也有了。。。


下面是我的操作的记录,有过shell操作经验的人,应该就很好上手的。


[root@dev-ops ~]$ipython

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 

Type "copyright", "credits" or "license" for more information.


IPython 1.2.1 -- An enhanced Interactive Python.

?         -> Introduction and overview of IPython's features.

%quickref -> Quick reference.

help      -> Python's own help system.

object?   -> Details about 'object', use 'object??' for extra details.


In [1]: import docker


创建docker的链接,这里是通过sock连接的。

In [2]: c = docker.Client(base_url='unix://var/run/docker.sock',version='1.9',timeout=10)


我们可以看到里面有很多的功能。

In [3]: c.

c.adapters                      c.copy                          c.headers                       c.login                         c.proxies                       c.send

c.attach                        c.create_container              c.history                       c.logs                          c.pull                          c.start

c.attach_socket                 c.create_container_from_config  c.hooks                         c.max_redirects                 c.push                          c.stop

c.auth                          c.delete                        c.images                        c.mount                         c.put                           c.stream

c.base_url                      c.diff                          c.import_image                  c.options                       c.remove_container              c.tag

c.build                         c.events                        c.info                          c.params                        c.remove_image                  c.top

c.cert                          c.export                        c.insert                        c.patch                         c.request                       c.trust_env

c.close                         c.get                           c.inspect_container             c.ping                          c.resize                        c.verify

c.commit                        c.get_adapter                   c.inspect_image                 c.port                          c.resolve_redirects             c.version

c.containers                    c.get_image                     c.kill                          c.post                          c.restart                       c.wait

c.cookies                       c.head                          c.load_image                    c.prepare_request               c.search                        


这里是查看已经部署好的images镜像

In [3]: c.images()

Out[3]: 

[{u'Created': 1407902496,

  u'Id': u'57672d1b597912c7b6841c05c0e07e525890cfd64cbd37c84754e7d7e54ee766',

  u'ParentId': u'47386e322f5deffbc04c777632e1f1ac7e6ddd6909ae6b9ce8d1d78dc2bb6d0c',

  u'RepoTags': [u'ubuntu_redis:latest'],

  u'Size': 2675587,

  u'VirtualSize': 257554797},

 {u'Created': 1407684299,

  u'Id': u'636d86f228c7c6e844d1473245a9580d9c57fd0bfd1b5b9172aa5c168581978c',

  u'ParentId': u'e882dd610d1ca64817106dcbda29b2c78536f5fb75f780583cc9fac0efe05398',

  u'RepoTags': [u'rastasheep/ubuntu-sshd:14.04'],

  u'Size': 0,

  u'VirtualSize': 254925704},

 {u'Created': 1407342004,

  u'Id': u'1147568d245b369495b19b1943c0946a2b2d823d0a96b48bb7bee5f128090d29',

  u'ParentId': u'12175cbcbe499c80dd71e3085467d9178a1b5cfa47ecf1463302e09fe2f09e58',

  u'RepoTags': [u'rastasheep/ubuntu-sshd:12.04'],

  u'Size': 0,

  u'VirtualSize': 144645266},

 {u'Created': 1407341844,

  u'Id': u'8a63145eed52cf9ae6bdb064f370469d6fa3653f0da5d370ece9e270baf8d9cb',

  u'ParentId': u'ca60f67629d2c43012fb53f714e60672c4ad5b61520bb306e3a35614190dcf76',

  u'RepoTags': [u'rastasheep/ubuntu-sshd:13.10'],

  u'Size': 0,

  u'VirtualSize': 231639963},

 {u'Created': 1407167259,

  u'Id': u'47386e322f5deffbc04c777632e1f1ac7e6ddd6909ae6b9ce8d1d78dc2bb6d0c',

  u'ParentId': u'a8bbc54283bbc341c703970ed429e4def6c034273ede59aaf451449164c95775',

  u'RepoTags': [u'rastasheep/ubuntu-sshd:latest'],

  u'Size': 0,

  u'VirtualSize': 254879210},

 {u'Created': 1406884906,

  u'Id': u'b78c71c001db87eb2da7049f5f9610039afd3484f65e22a3284098792460040d',

  u'ParentId': u'e13b39edfcb4c5e15f876c2824fea1d738fb3825437162fad497138123f3235b',

  u'RepoTags': [u'lemonbar/centos6-ssh:latest'],

  u'Size': 0,

  u'VirtualSize': 296869021},

 {u'Created': 1405333140,

  u'Id': u'c9c48c3cb34c4b8305d7bae4f0c3c753fbca3ac96195e73e9fdab4a8fa24708a',

  u'ParentId': u'30ffc511bbe11f6205cdc0f2749cadcc0c2eca4f7296285b1af867afcb6ef842',

  u'RepoTags': [u'rastasheep/ubuntu-sshd:12.10'],

  u'Size': 0,

  u'VirtualSize': 188947523},

 {u'Created': 1405333120,

  u'Id': u'bf49ae3d55344648b354bddf22b2f15c48e2d74e52933404757a9eb470ac35e3',

  u'ParentId': u'561b2d67fd0a80367e9ab98f9893ce6d36006dbb452e7c8693f028fcaa5f6c7f',

  u'RepoTags': [u'rastasheep/ubuntu-sshd:13.04'],

  u'Size': 0,

  u'VirtualSize': 213124480}]



这里是搜索镜像,比如我想搜下, ubuntu redis 字眼的,结果没有搜到。  但是搜ubuntu_sshd有关的镜像会发现有的。

原文: http://rfyiamcool.blog.51cto.com/1030776/1539500

In [5]: c.search('ubuntu_redis')

Out[5]: []


In [6]: c.search('ubuntu_sshd')

Out[6]: 

[{u'description': u'',

  u'is_official': False,

  u'is_trusted': False,

  u'name': u'pungoyal/ubuntu_sshd',

  u'star_count': 0}]


这里是下载镜像

In []: c.pull('core9/docker-mongodb')


In [6]: c.create_container(image="ubuntu_redis", command="/usr/sbin/sshd -D",name="test_nima")

Out[6]: 

{u'Id': u'15bd8d4ecd1a50604732e1f81763eb347a1cf8937da929799e65261b004894ce',

 u'Warnings': None}


In [7]: 

启动容器

In [7]: c.start(container="15bd8d4ecd1a50604732e1f81763eb347a1cf8937da929799e65261b004894ce")


查看日志

In [8]: c.logs(container="15bd8d4ecd1a50604732e1f81763eb347a1cf8937da929799e65261b004894ce")

Out[8]: ''


wKiom1Pq--ChU7DPAAJOleUQxEU687.jpg


我们再试图关闭下这个容器,然后inspect看下他的运行状态


In [18]: c.stop('15bd8d4ecd1a')

In [20]: re_info = c.inspect_container('15bd8d4ecd1a')

In [22]: re_info['State']['Running']

Out[31]: False


wKioL1PrAyzwF-K1AAIVBUcpyxg738.jpg

原文: http://rfyiamcool.blog.51cto.com/1030776/1539500

好了,我们通过docker shell看下刚才创建的结果。 我们在用python docker api的时候,创建了一个叫test_nima的容器。  


wKioL1Pq_JegbtxHAAKKqtWyJeQ809.jpg


篇幅的问题就不多说了, api几乎包含了docker的功能,最少能满足我的应用,及在开发中与运维平台的对接。朋友的公司已经在用纯node.js写了套api,为公司内部服务。其实官网和社区提供了好几个web ui,但是那毕竟是别人写的。改起来不简单。我打算在下篇文章会介绍下, 如何自己实现一套简单的docker rest api 接口。 


偶了 !






 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1539500,如需转载请自行联系原作者


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4天前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
5天前
|
存储 监控 API
1688平台API接口实战:Python实现店铺全量商品数据抓取
本文介绍如何使用Python通过1688开放平台的API接口自动化抓取店铺所有商品数据。首先,开发者需在1688开放平台完成注册并获取App Key和App Secret,申请“商品信息查询”权限。接着,利用`alibaba.trade.product.search4trade`接口,构建请求参数、生成MD5签名,并通过分页机制获取全量商品数据。文中详细解析了响应结构、存储优化及常见问题处理方法,还提供了竞品监控、库存预警等应用场景示例和完整代码。
|
7天前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
8天前
|
JSON API 数据格式
Python 请求微店商品详情数据 API 接口
微店开放平台允许开发者通过API获取商品详情数据。使用Python请求微店商品详情API的主要步骤包括:1. 注册并申请API权限,获得app_key和app_secret;2. 确定API接口地址与请求参数,如商品ID;3. 生成签名确保请求安全合法;4. 使用requests库发送HTTP请求获取数据;5. 处理返回的JSON格式响应数据。开发时需严格遵循微店API文档要求。
|
1月前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
2月前
|
数据采集 JavaScript 前端开发
京东商品详情 API 接口指南(Python 篇)
本简介介绍如何使用Python抓取京东商品详情数据。首先,需搭建开发环境并安装必要的库(如requests、BeautifulSoup和lxml),了解京东反爬虫机制,确定商品ID获取方式。通过发送HTTP请求并解析HTML,可提取价格、优惠券、视频链接等信息。此方法适用于电商数据分析、竞品分析、购物助手及内容创作等场景,帮助用户做出更明智的购买决策,优化营销策略。
|
2月前
|
数据采集 供应链 API
Python爬虫与1688图片搜索API接口:深度解析与显著收益
在电子商务领域,数据是驱动业务决策的核心。阿里巴巴旗下的1688平台作为全球领先的B2B市场,提供了丰富的API接口,特别是图片搜索API(`item_search_img`),允许开发者通过上传图片搜索相似商品。本文介绍如何结合Python爬虫技术高效利用该接口,提升搜索效率和用户体验,助力企业实现自动化商品搜索、库存管理优化、竞品监控与定价策略调整等,显著提高运营效率和市场竞争力。
116 3
|
3月前
|
JavaScript API C#
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
61 10
|
3月前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
3月前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
193 5

热门文章

最新文章