使用python的docker-py實現docker的api操作
前沿:
聽同事說,以後的dba申請可能有部分走其他部門的docker ,那邊貌似在搞一個類似docker的平臺管理系統,據說很霸道。於是乎,我自己也想嘗試寫一個簡單的doker管理平臺。 做為起步我先搞搞docker api,docker官網有個docker-py,用起來很是清爽簡單。
有關docker的更多的文章,大家可以到我的獨立部落格看看。 xiaorui.cc
首先安裝docker的python相關的模組。
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 p_w_picpaths
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
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
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 p_w_picpath有了,容器也有了,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.p_w_picpaths c.mount c.put c.stream
c.base_url c.diff c.import_p_w_picpath c.options c.remove_container c.tag
c.build c.events c.info c.params c.remove_p_w_picpath 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_p_w_picpath c.port c.resolve_redirects c.version
c.containers c.get_p_w_picpath c.kill c.post c.restart c.wait
c.cookies c.head c.load_p_w_picpath c.prepare_request c.search
這裡是檢視已經部署好的p_w_picpaths映象
In [3]: c.p_w_picpaths()
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(p_w_picpath="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 介面。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69920892/viewspace-2722831/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python OpenCV加法操作的實現PythonOpenCV
- Java API 操作Docker淺談JavaAPIDocker
- 呼叫 Rational CM API 實現 Rational ClearQuest 的相關操作API
- 用切片操作實現的Python篩法Python
- python使用json web token (jwt)實現http api的加密傳輸PythonJSONWebJWTHTTPAPI加密
- 『現學現忘』Docker基礎 — 27、Docker映象的commit操作DockerMIT
- Python 通過List 實現佇列的操作Python佇列
- 使用 Flask 實現 RESTful APIFlaskRESTAPI
- Docker的核心實現原理Docker
- python中的字典賦值操作怎麼實現?Python賦值
- Docker的基本操作Docker
- 「docker實戰篇」python的docker爬蟲技術-pythonDockerPython爬蟲
- 使用PreparedStatement實現CRUD操作
- 使用Task實現非阻塞式的I/O操作
- 8、docker swarm操作使用DockerSwarm
- python 使用csv的基本操作Python
- 使用 Java API 操作 elasticsearchJavaAPIElasticsearch
- docker操作mongo+docker的常用操作+mongo與.netDockerGo
- 使用Java API操作zookeeper的acl許可權JavaAPI
- 實現一個jQuery的APIjQueryAPI
- Nancy之實現API的功能NaNAPI
- API的設計與實現API
- 實驗 詳解Docker的各種操作小實驗Docker
- 多選操作的實現
- Docker映象的基本操作Docker
- 使用PrepareStatement實現批量插入操作REST
- Python實現ftp常用操作[ftplib]PythonFTP
- java操作redis。jedis使用apiJavaRedisAPI
- docker 實現 Redis 的哨兵機制DockerRedis
- Docker 使用者操作使用說明Docker
- 『無為則無心』Python序列 — 17、Python字串操作的常用APIPython字串API
- CPU實現原子操作的原理
- 圖的基本操作和實現
- 棧的實現及基本操作
- 使用docker安裝hadoop(已實現)DockerHadoop
- Python 中 lru_cache 的使用和實現Python
- 使用Python 實現 PDF 到 HTML 的轉換PythonHTML
- 使用 nuget server 的 API 來實現搜尋安裝 nuget 包ServerAPI