Docker 系列(八):Docker API使用
Docker API种类
docker 的api遵循rest的风格,可以查看https://docs.docker.com/engine/api/;
docker官方主要有三大对外api:
- Docker Registry API
- Docker Hub API
- Docker Remote API
1. Docker Registry API
这个是docker镜像仓库的api,通过操作这套API,你可以自由的自动化、程序化的管理你的镜像仓库。
2. Docker Hub API
Docker Hub API是用户管理操作的API,docker hub是使用校验和公共 namespaces 的方式来存储账户信息、认证账户、进行账户授权。API同时也允许操作相关的用户仓库和 library 仓库。
3. Docker Remote API
这套API用于控制主机 Docker 服务端的 API,等价于 docker命令行客户端。 有了它,你能远程操作docker容器,更重要的是你可以通过程序自动化运维docker进程。
API使用前准备
在体验之前,我们需要开启docker rest api。具体开启的方法:
$ vim /usr/lib/systemd/system/docker.service
在 ExecStart=/usr/bin/dockerd 后面直接添加 -H tcp://0.0.0.0:8088 -H unix:///var/run/docker.sock (注意端口8088自己随便定义,别跟当前的冲突即可)
$ systemctl daemon-reload $ systemctl restart docker
命令行执行测试:curl 127.0.0.1:8088/info | python -mjson.tool
如何操作docker API
最简单的curl方式
CURL这个命令,我想大家都熟悉,默认linux下都自带安装。很多测试http的方法都可以直接使用 CURL的方式。
比如我们查看docker的images详细信息,就可以直接用curl 来调取:
$ curl -X GET http://127.0.0.1:8088/images/json
这样显示会比较错乱无章,我们可以在命令后面加个 python -mjson.tool 格式化下
$ curl -X GET http://127.0.0.1:8088/images/json | python -mjson.tool
这样的结果格式就比较标准化,比较容易阅读。
查看所有containers容器:
$ curl -X GET http://127.0.0.1:8088/containers/json | python -mjson.tool
创建一个containers容器:
这里创建一个mariadb数据库的容器,设置了密码是123456,监听端口是3306
$ curl -X POST -H "Content-Type: application/json" -d '{
"Image": "mariadb",
"Env": ["MYSQL_ROOT_PASSWORD=123456"],
"ExposedPorts": {
"3306/tcp": {}
},
"HostConfig": {
"PortBindings": {
"3306/tcp": [{"HostIp": "","HostPort": "3306"}]
}
},
"NetworkSettings": {
"Ports": {
"5000/tcp": [{"HostIp": "0.0.0.0","HostPort": "3306"}]
}
}
}' http://127.0.0.1:8088/containers/create
启动/停止/重启 一个containers容器:
$ curl -X POST http://127.0.0.1:8088/containers/{id}/start (注意这里是POST方法)
$ curl -X POST http://127.0.0.1:8088/containers/{id}/stop (注意这里是POST方法)
$ curl -X POST http://127.0.0.1:8088/containers/{id}/restart (注意这里是POST方法)
...
具体还有很多API方法,大家都可以登录上面提到的链接进行查看
https://docs.docker.com/engine/api/v1.38
python程序脚本方式
Docker给python提供了一个非常强大的库,名字就叫做docker。我们可以登录官方的python sdk地址来学习认识python如何具体操作docker。
地址是:https://docker-py.readthedocs.io/en/stable/
安装docker python库
$ pip install docker
开始使用
import docker client = docker.DockerClient(base_url='unix://var/run/docker.sock', version="auto") client.containers.run("ubuntu", "echo hello world")
- 第一行表示引入第三方库docker。
- 第二行用于配置Docker服务端的基本信息,包含了base_url(Docker服务端的地址)以及version(auto可以自动检查docker的版本)。
- 第三行则是相当于运行了一个docker run ubuntu echo hello world的命令。
进阶使用
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_id 是你要输入的具体容器id container.start() #启动容器
端口映射
import docker client = docker.DockerClient(base_url="tcp://ip:port") container = client.containers.run('mysql/mysql-server:5.7',ports={'3306/tcp': 3300}, auto_remove=True, name='shark_mysql', detach=True) # 查看容器对象的方法和属性 print(dir(container)) print(container.short_id)
端口{'3306/tcp': 3300}
将容器的 TCP3306
端口映射到宿主机的3300
指定了容器的名称name
后台运行,此时这个 Python 程序不用被挂起detach=True
container
是被创建容器的对象