使用Python实现Docker编程

原文: https://blog.csdn.net/xyz_dream/article/details/79480593

Docker引擎其实包括两部分内容,采用C/S架构。所以会包含一个client和server端,但是一般都是在本地操作所以有时时候没太感觉出来很慢的样子。其实和我们使用的mysql是一样的,默认mysql -H 没有填写IP地址,默认是连接本地的mysql服务的3306端口。但是指定了-H 和IP地址之后,大家发现也是可以远程操作数据库的。Docker服务端有一守护进程,默认使在/var/run/docker.sock的一个socket链接文件,提供对本地dcoker的监听操作。Docker服务端其实提供了一套restful api口,docker客户端其实也是基于这个接口做的,只不过为我们简化了很多的东西,让我们直接通过简单的docker指令,例docker images(列出镜像列表),其实背后也是调用了docker 服务端的restful api接口实现对镜像镜像管理的。那么这个样就爽了,也就是说docker服务端不需要特定的客户端也可以对docker的镜像,容器镜像管理。只要你阅读docker api文档,通过发送http请求去调用接口,即可达到操作docker的功能。虽然是这么说,但是通过原生http请求然后参照文档,其实是相对痛苦的。所以Docker公司提供了SDK,目前只有Go,和Python这两门语言的版本SDK。本来想看看是不是有PHP的,后来发现没有。看来大家更倾向于去使用Python,毕竟它的包(package)多也是很正常的。

好的,废话不多说。进入正题,使用Python的SDK去对Docker进行操作,下面演示一下使用Python远程调用Docker的案例。

1. 想要操作远程docker 服务端,首先必须先让docker 守护进程监听远程主机。前面讲的都是基于/var/run/docker.sock这个socket文件进行操作的,假如你是在本地而不是远程操作docker。不用管下面的步骤。

首先修改docker配置文件: vim /lib/systemd/system/docker.service

[Service]

Type=notify# the default is not to use systemd for cgroups because the delegate issues still# exists and systemd currently does not support the cgroup feature set required# for containers run by docker

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID


ExecStart=/usr/bin/dockerd 修改为ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://本机ip:2375

端口自定义,不和系统冲突即可。

重启docker网络: systemctl daemon-reload

重启docker服务: systemctl start docker

测试是否成功: docker -H 本机ip地址 images (列出本机的image) # 若可以显示鸡配置成功,否则请检查配置情况

小提示: centos7 完全没有问题,但是在ubuntu修改配置文件(var/default/docker)重启等都无效。目前没找有效方法,都是在Centos做的演示


2. pip install docker #pip安装docker模块

模块文档地址: https://docker-py.readthedocs.io/en/stable/

3. 使用python操作远程docker

import docker

client = docker.DockerClient(base_url=”tcp://ip:port”)

client.images.list() # docker images 显示image的信息列表

client.containers.list() # docker ps

client.containers.list(all=True) # docker ps -a

container = client.containers.get(container_id) #获取daodocker容器

container.start() # docker start container_id 开启容器

等等。详情请阅读官方文档


这样我们就可以通过Python来操作我们远程主机的Docker了。可以实现自己容器管理,Docker编程等等。最后提一个portainer/portainer这个镜像是用于Docker可视化界面的,可以让你通过可视化界面去操作Docker.看了一下2015年的时候有一个叫shipyard关于去可视化界面管理Docker的开源项目在github。后来不知道怎么了,看着作者留言,好像是项目废弃了然后每人接手,目前去github上找没有源代码等信息了。所以替代品变为了 docker-ui portainer。看着docker-ui似乎也转向了portainer。