【docker-py】html
官方文檔:【https://docker-py.readthedocs.io/en/stable/images.html】node
衆所周知,Docker向外界提供了一個API來管理其中的資源。這個API能夠是socket文件形式的(通常也是默認的,在/var/run/docker.sock中),也能夠是TCP形式的。之前想要經過編程的方法來調用這些API仍是傻傻的用subprocess等和系統層面交互的模塊來調用,而docker-py這個模塊則是直接把DockerAPI的調用封裝了進去,讓咱們能夠更加貼合Docker地進行API調用。python
安裝仍是用pip:linux
pip install docker-py,意外的,這個模塊所須要的依賴特別多,等了比我預想更長的時間,裝好了。在python中import docker,不報錯就是裝好了。git
■ 簡單使用docker
網上的部分教程和使用方法說明多是由於版本不切合的緣由,不奏效。從中篩選了一些奏效的代碼。首先是一個最簡單的應用,就是實例化出一個dockerapi調用者的實例:shell
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以及其所依賴的環境中各個組件的版本信息以一個字典的方式展示出來。上述在虛擬機中輸出以下:centos
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環境中的一些方法如:api
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