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。